From b25f376f4eca5c51d663b7b7a1b417b02472513a Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Mon, 15 Feb 2021 12:47:32 +0300 Subject: [PATCH] fix: cleanup dist folder, change README - move images for README into docs/img - move libs/* into utils. libs folder is copied into dist by grafana-toolkit - remove d3-scale-chromatic sources, use it from dependencies - update compatible versions in README - update installation info --- README.md | 63 ++++++++++-------- dist/README.md | 63 ++++++++++-------- dist/dark.js.map | 1 + .../d3-scale-chromatic/categorical/Accent.js | 3 - .../d3-scale-chromatic/categorical/Dark2.js | 3 - .../d3-scale-chromatic/categorical/Paired.js | 3 - .../d3-scale-chromatic/categorical/Pastel1.js | 3 - .../d3-scale-chromatic/categorical/Pastel2.js | 3 - .../d3-scale-chromatic/categorical/Set1.js | 3 - .../d3-scale-chromatic/categorical/Set2.js | 3 - .../d3-scale-chromatic/categorical/Set3.js | 3 - dist/libs/d3-scale-chromatic/colors.js | 5 -- .../libs/d3-scale-chromatic/diverging/BrBG.js | 16 ----- .../d3-scale-chromatic/diverging/GnYlRd.js | 16 ----- .../libs/d3-scale-chromatic/diverging/PRGn.js | 16 ----- .../libs/d3-scale-chromatic/diverging/PiYG.js | 16 ----- .../libs/d3-scale-chromatic/diverging/PuOr.js | 16 ----- .../libs/d3-scale-chromatic/diverging/RdBu.js | 16 ----- .../libs/d3-scale-chromatic/diverging/RdGy.js | 16 ----- .../d3-scale-chromatic/diverging/RdYlBu.js | 16 ----- .../d3-scale-chromatic/diverging/RdYlGn.js | 16 ----- .../d3-scale-chromatic/diverging/Spectral.js | 16 ----- dist/libs/d3-scale-chromatic/index.js | 36 ---------- dist/libs/d3-scale-chromatic/ramp.js | 5 -- .../sequential-multi/BuGn.js | 14 ---- .../sequential-multi/BuPu.js | 14 ---- .../sequential-multi/GnBu.js | 14 ---- .../sequential-multi/OrRd.js | 14 ---- .../sequential-multi/PuBu.js | 14 ---- .../sequential-multi/PuBuGn.js | 14 ---- .../sequential-multi/PuRd.js | 14 ---- .../sequential-multi/RdPu.js | 14 ---- .../sequential-multi/YlGn.js | 14 ---- .../sequential-multi/YlGnBu.js | 14 ---- .../sequential-multi/YlOrBr.js | 14 ---- .../sequential-multi/YlOrRd.js | 14 ---- .../sequential-single/Blues.js | 14 ---- .../sequential-single/Greens.js | 14 ---- .../sequential-single/Greys.js | 14 ---- .../sequential-single/Oranges.js | 14 ---- .../sequential-single/Purples.js | 14 ---- .../sequential-single/Reds.js | 14 ---- dist/light.js.map | 1 + dist/module.js.map | 2 +- dist/plugin.json | 7 +- docs/img/__repo-social-preview.png | Bin 0 -> 35325 bytes {src => docs}/img/color-mapping.png | Bin {dist => docs}/img/color-preset-01.png | Bin {dist => docs}/img/color-preset-02.png | Bin .../img/flant-statusmap-panel-dark.png | Bin {src => docs}/img/flant-statusmap-panel.png | Bin .../img/min-width-spacing-rounding-01.png | Bin .../img/min-width-spacing-rounding-02.png | Bin {dist => docs}/img/multiple-values-error.png | Bin {dist => docs}/img/null-as-empty.png | Bin {dist => docs}/img/options-bucket.png | Bin {dist => docs}/img/options-display.png | Bin {dist => docs}/img/pagination-graph.png | Bin {src => docs}/img/queries-example.png | Bin {dist => docs}/img/tooltip-editor.png | Bin {dist => docs}/img/tooltip-frozen.png | Bin package.json | 8 +-- src/color_legend.ts | 4 +- src/img/color-preset-01.png | Bin 22974 -> 0 bytes src/img/color-preset-02.png | Bin 28464 -> 0 bytes src/img/min-width-spacing-rounding-01.png | Bin 29803 -> 0 bytes src/img/min-width-spacing-rounding-02.png | Bin 47181 -> 0 bytes src/img/multiple-values-error.png | Bin 22434 -> 0 bytes src/img/null-as-empty.png | Bin 6384 -> 0 bytes src/img/options-bucket.png | Bin 12687 -> 0 bytes src/img/options-display.png | Bin 11510 -> 0 bytes src/img/pagination-graph.png | Bin 45541 -> 0 bytes src/img/tooltip-editor.png | Bin 75651 -> 0 bytes src/img/tooltip-frozen.png | Bin 41230 -> 0 bytes .../d3-scale-chromatic/categorical/Accent.js | 3 - .../d3-scale-chromatic/categorical/Dark2.js | 3 - .../d3-scale-chromatic/categorical/Paired.js | 3 - .../d3-scale-chromatic/categorical/Pastel1.js | 3 - .../d3-scale-chromatic/categorical/Pastel2.js | 3 - .../d3-scale-chromatic/categorical/Set1.js | 3 - .../d3-scale-chromatic/categorical/Set2.js | 3 - .../d3-scale-chromatic/categorical/Set3.js | 3 - src/libs/d3-scale-chromatic/colors.js | 5 -- src/libs/d3-scale-chromatic/diverging/BrBG.js | 16 ----- .../d3-scale-chromatic/diverging/GnYlRd.js | 16 ----- src/libs/d3-scale-chromatic/diverging/PRGn.js | 16 ----- src/libs/d3-scale-chromatic/diverging/PiYG.js | 16 ----- src/libs/d3-scale-chromatic/diverging/PuOr.js | 16 ----- src/libs/d3-scale-chromatic/diverging/RdBu.js | 16 ----- src/libs/d3-scale-chromatic/diverging/RdGy.js | 16 ----- .../d3-scale-chromatic/diverging/RdYlBu.js | 16 ----- .../d3-scale-chromatic/diverging/RdYlGn.js | 16 ----- .../d3-scale-chromatic/diverging/Spectral.js | 16 ----- src/libs/d3-scale-chromatic/index.js | 36 ---------- src/libs/d3-scale-chromatic/ramp.js | 5 -- .../sequential-multi/BuGn.js | 14 ---- .../sequential-multi/BuPu.js | 14 ---- .../sequential-multi/GnBu.js | 14 ---- .../sequential-multi/OrRd.js | 14 ---- .../sequential-multi/PuBu.js | 14 ---- .../sequential-multi/PuBuGn.js | 14 ---- .../sequential-multi/PuRd.js | 14 ---- .../sequential-multi/RdPu.js | 14 ---- .../sequential-multi/YlGn.js | 14 ---- .../sequential-multi/YlGnBu.js | 14 ---- .../sequential-multi/YlOrBr.js | 14 ---- .../sequential-multi/YlOrRd.js | 14 ---- .../sequential-single/Blues.js | 14 ---- .../sequential-single/Greens.js | 14 ---- .../sequential-single/Greys.js | 14 ---- .../sequential-single/Oranges.js | 14 ---- .../sequential-single/Purples.js | 14 ---- .../sequential-single/Reds.js | 14 ---- src/libs/polygrafill/README.md | 8 --- src/module.ts | 4 +- src/plugin.json | 7 +- src/rendering.ts | 4 +- src/{ => util}/d3/d3-scale-chromatic.ts | 2 + .../grafana/events/appEvents.ts | 0 src/{libs => util}/grafana/events/events.ts | 0 src/{libs => util}/grafana/events/index.ts | 0 .../grafana/events/panelEvents.ts | 0 {dist/libs => src/util}/polygrafill/README.md | 2 +- src/{libs => util}/polygrafill/funcs.ts | 0 src/{libs => util}/polygrafill/index.ts | 0 webpack.config.js | 15 +++++ 126 files changed, 109 insertions(+), 1046 deletions(-) create mode 100644 dist/dark.js.map delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Accent.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Dark2.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Paired.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Pastel1.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Pastel2.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Set1.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Set2.js delete mode 100644 dist/libs/d3-scale-chromatic/categorical/Set3.js delete mode 100644 dist/libs/d3-scale-chromatic/colors.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/BrBG.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/GnYlRd.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/PRGn.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/PiYG.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/PuOr.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/RdBu.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/RdGy.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/RdYlBu.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/RdYlGn.js delete mode 100644 dist/libs/d3-scale-chromatic/diverging/Spectral.js delete mode 100644 dist/libs/d3-scale-chromatic/index.js delete mode 100644 dist/libs/d3-scale-chromatic/ramp.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Blues.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Greens.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Greys.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Oranges.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Purples.js delete mode 100644 dist/libs/d3-scale-chromatic/sequential-single/Reds.js create mode 100644 dist/light.js.map create mode 100644 docs/img/__repo-social-preview.png rename {src => docs}/img/color-mapping.png (100%) rename {dist => docs}/img/color-preset-01.png (100%) rename {dist => docs}/img/color-preset-02.png (100%) rename {src => docs}/img/flant-statusmap-panel-dark.png (100%) rename {src => docs}/img/flant-statusmap-panel.png (100%) rename {dist => docs}/img/min-width-spacing-rounding-01.png (100%) rename {dist => docs}/img/min-width-spacing-rounding-02.png (100%) rename {dist => docs}/img/multiple-values-error.png (100%) rename {dist => docs}/img/null-as-empty.png (100%) rename {dist => docs}/img/options-bucket.png (100%) rename {dist => docs}/img/options-display.png (100%) rename {dist => docs}/img/pagination-graph.png (100%) rename {src => docs}/img/queries-example.png (100%) rename {dist => docs}/img/tooltip-editor.png (100%) rename {dist => docs}/img/tooltip-frozen.png (100%) delete mode 100644 src/img/color-preset-01.png delete mode 100644 src/img/color-preset-02.png delete mode 100644 src/img/min-width-spacing-rounding-01.png delete mode 100644 src/img/min-width-spacing-rounding-02.png delete mode 100644 src/img/multiple-values-error.png delete mode 100644 src/img/null-as-empty.png delete mode 100644 src/img/options-bucket.png delete mode 100644 src/img/options-display.png delete mode 100644 src/img/pagination-graph.png delete mode 100644 src/img/tooltip-editor.png delete mode 100644 src/img/tooltip-frozen.png delete mode 100644 src/libs/d3-scale-chromatic/categorical/Accent.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Dark2.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Paired.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Pastel1.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Pastel2.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Set1.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Set2.js delete mode 100644 src/libs/d3-scale-chromatic/categorical/Set3.js delete mode 100644 src/libs/d3-scale-chromatic/colors.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/BrBG.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/GnYlRd.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/PRGn.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/PiYG.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/PuOr.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/RdBu.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/RdGy.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/RdYlBu.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/RdYlGn.js delete mode 100644 src/libs/d3-scale-chromatic/diverging/Spectral.js delete mode 100644 src/libs/d3-scale-chromatic/index.js delete mode 100644 src/libs/d3-scale-chromatic/ramp.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/BuGn.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/BuPu.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/GnBu.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/OrRd.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/PuBu.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/PuRd.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/RdPu.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/YlGn.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Blues.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Greens.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Greys.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Oranges.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Purples.js delete mode 100644 src/libs/d3-scale-chromatic/sequential-single/Reds.js delete mode 100644 src/libs/polygrafill/README.md rename src/{ => util}/d3/d3-scale-chromatic.ts (95%) rename src/{libs => util}/grafana/events/appEvents.ts (100%) rename src/{libs => util}/grafana/events/events.ts (100%) rename src/{libs => util}/grafana/events/index.ts (100%) rename src/{libs => util}/grafana/events/panelEvents.ts (100%) rename {dist/libs => src/util}/polygrafill/README.md (83%) rename src/{libs => util}/polygrafill/funcs.ts (100%) rename src/{libs => util}/polygrafill/index.ts (100%) create mode 100644 webpack.config.js diff --git a/README.md b/README.md index e31cbdf..66fc6ec 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -

-Download from GitHub -GH Discussions -Telegram chat RU -

- # Statusmap panel for Grafana -![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel.png) +[![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) +[![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) +[![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) -![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel-dark.png) +Panel to show discrete statuses of multiple targets over time. + +![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel.png) + +![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel-dark.png) ## Features @@ -27,21 +27,28 @@ - Prometheus - InfluxDB - Mysql -* Tested with Grafana: - - 7.0, 7.1, 7.2, 7.3 - - 6.6, 6.7 +* Supported Grafana versions: + - 6.7+ are the most priority (6.7, 7.0-7.4) + - also works in 5.4.3 and 6.0+ ## Installation -Plugin can be installed with GF_INSTALL_PLUGINS="flant-statusmap-panel" or you can use Git and clone this repo: +The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". + +Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). + + +``` +curl -sLO +unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel +``` + +For 5.x and 6.x versions of Grafana you can clone this repo: ``` git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel ``` -Alternatively, you can download [ZIP archive](https://github.com/flant/grafana-statusmap/archive/master.zip) -of this repo and unpack it into /var/lib/grafana/plugins directory. - ## Motivation @@ -134,17 +141,17 @@ ORDER BY $__timeGroup(date_insert,$__interval) First of all, an individual query for each possible status' value should be created. Each query should also have similar legend for grouping: -![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/queries-example.png) +![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/queries-example.png) Then, color mapping for status' values should be defined in __Discrete__ color mode: -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-mapping.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-mapping.png) Use can use presets to define a trafic light colors or 8 colors from [solarized](https://ethanschoonover.com/solarized/) palette: -![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-01.png) +![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-01.png) -![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-02.png) +![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-02.png) _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in [Heatmap](https://grafana.com/plugins/heatmap) plugin._ @@ -154,30 +161,30 @@ _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in #### Bucket -![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-bucket.png) +![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-bucket.png) __Multiple values__ checkbox specifies how they should be displayed: * If it's off, multiple values for one bucket are treated as error; * If it's on, color for such bucket would be determined by the value having least index in color mapping. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/multiple-values-error.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/multiple-values-error.png) __Display nulls__ can be treated as empty buckets or displayed with the color of `0` value. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/null-as-empty.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/null-as-empty.png) __Min width__ and __spacing__ are used to specify minimal bucket width and spacing between buckets. __Rounding__ may be used to round edges. -![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-01.png) +![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-01.png) -![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-02.png) +![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-02.png) __Values index__ set to positive number to display only values from specified timeseries. #### Display -![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-display.png) +![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-display.png) __Show legend__ checkbox toggles legend at the bottom of the panel. @@ -185,7 +192,7 @@ __Rows sort__ can be used to sort labels on Y axis. Metrics — sort y labels a #### Pagination -![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/pagination-graph.png) +![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/pagination-graph.png) __Enable pagination__ toggles pagination controls on graph. @@ -193,7 +200,7 @@ __Rows per page__ a number of rows to display on graph. #### Tooltip -![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-frozen.png) +![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-frozen.png) __Show tooltip__ toggles tooltip display on mouse over buckets. @@ -205,7 +212,7 @@ __Items__ is a list of definitions to display URLs in tooltip. Each URL has a template, icon, label and formating options: lowercase and date format for variables. -![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-editor.png) +![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) ## Development diff --git a/dist/README.md b/dist/README.md index e31cbdf..66fc6ec 100644 --- a/dist/README.md +++ b/dist/README.md @@ -1,14 +1,14 @@ -

-Download from GitHub -GH Discussions -Telegram chat RU -

- # Statusmap panel for Grafana -![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel.png) +[![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) +[![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) +[![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) -![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel-dark.png) +Panel to show discrete statuses of multiple targets over time. + +![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel.png) + +![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel-dark.png) ## Features @@ -27,21 +27,28 @@ - Prometheus - InfluxDB - Mysql -* Tested with Grafana: - - 7.0, 7.1, 7.2, 7.3 - - 6.6, 6.7 +* Supported Grafana versions: + - 6.7+ are the most priority (6.7, 7.0-7.4) + - also works in 5.4.3 and 6.0+ ## Installation -Plugin can be installed with GF_INSTALL_PLUGINS="flant-statusmap-panel" or you can use Git and clone this repo: +The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". + +Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). + + +``` +curl -sLO +unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel +``` + +For 5.x and 6.x versions of Grafana you can clone this repo: ``` git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel ``` -Alternatively, you can download [ZIP archive](https://github.com/flant/grafana-statusmap/archive/master.zip) -of this repo and unpack it into /var/lib/grafana/plugins directory. - ## Motivation @@ -134,17 +141,17 @@ ORDER BY $__timeGroup(date_insert,$__interval) First of all, an individual query for each possible status' value should be created. Each query should also have similar legend for grouping: -![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/queries-example.png) +![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/queries-example.png) Then, color mapping for status' values should be defined in __Discrete__ color mode: -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-mapping.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-mapping.png) Use can use presets to define a trafic light colors or 8 colors from [solarized](https://ethanschoonover.com/solarized/) palette: -![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-01.png) +![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-01.png) -![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-02.png) +![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-02.png) _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in [Heatmap](https://grafana.com/plugins/heatmap) plugin._ @@ -154,30 +161,30 @@ _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in #### Bucket -![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-bucket.png) +![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-bucket.png) __Multiple values__ checkbox specifies how they should be displayed: * If it's off, multiple values for one bucket are treated as error; * If it's on, color for such bucket would be determined by the value having least index in color mapping. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/multiple-values-error.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/multiple-values-error.png) __Display nulls__ can be treated as empty buckets or displayed with the color of `0` value. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/null-as-empty.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/null-as-empty.png) __Min width__ and __spacing__ are used to specify minimal bucket width and spacing between buckets. __Rounding__ may be used to round edges. -![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-01.png) +![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-01.png) -![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-02.png) +![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-02.png) __Values index__ set to positive number to display only values from specified timeseries. #### Display -![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-display.png) +![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-display.png) __Show legend__ checkbox toggles legend at the bottom of the panel. @@ -185,7 +192,7 @@ __Rows sort__ can be used to sort labels on Y axis. Metrics — sort y labels a #### Pagination -![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/pagination-graph.png) +![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/pagination-graph.png) __Enable pagination__ toggles pagination controls on graph. @@ -193,7 +200,7 @@ __Rows per page__ a number of rows to display on graph. #### Tooltip -![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-frozen.png) +![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-frozen.png) __Show tooltip__ toggles tooltip display on mouse over buckets. @@ -205,7 +212,7 @@ __Items__ is a list of definitions to display URLs in tooltip. Each URL has a template, icon, label and formating options: lowercase and date format for variables. -![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-editor.png) +![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) ## Development diff --git a/dist/dark.js.map b/dist/dark.js.map new file mode 100644 index 0000000..b037367 --- /dev/null +++ b/dist/dark.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s"],"mappings":"sCACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,I","file":"dark.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/libs/d3-scale-chromatic/categorical/Accent.js b/dist/libs/d3-scale-chromatic/categorical/Accent.js deleted file mode 100644 index 07ab707..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Accent.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Dark2.js b/dist/libs/d3-scale-chromatic/categorical/Dark2.js deleted file mode 100644 index 13fc291..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Dark2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Paired.js b/dist/libs/d3-scale-chromatic/categorical/Paired.js deleted file mode 100644 index 30094a0..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Paired.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js b/dist/libs/d3-scale-chromatic/categorical/Pastel1.js deleted file mode 100644 index 4b0e093..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js b/dist/libs/d3-scale-chromatic/categorical/Pastel2.js deleted file mode 100644 index 520a5a3..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set1.js b/dist/libs/d3-scale-chromatic/categorical/Set1.js deleted file mode 100644 index 8c34c1b..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set2.js b/dist/libs/d3-scale-chromatic/categorical/Set2.js deleted file mode 100644 index e6bad53..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set3.js b/dist/libs/d3-scale-chromatic/categorical/Set3.js deleted file mode 100644 index 8eeeb04..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set3.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); diff --git a/dist/libs/d3-scale-chromatic/colors.js b/dist/libs/d3-scale-chromatic/colors.js deleted file mode 100644 index aeedad5..0000000 --- a/dist/libs/d3-scale-chromatic/colors.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(specifier) { - var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; - while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); - return colors; -} diff --git a/dist/libs/d3-scale-chromatic/diverging/BrBG.js b/dist/libs/d3-scale-chromatic/diverging/BrBG.js deleted file mode 100644 index 5e27ee6..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/BrBG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "d8b365f5f5f55ab4ac", - "a6611adfc27d80cdc1018571", - "a6611adfc27df5f5f580cdc1018571", - "8c510ad8b365f6e8c3c7eae55ab4ac01665e", - "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", - "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", - "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", - "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", - "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js deleted file mode 100644 index 2857b2b..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "91cf60ffffbffc8d59", - "1a9641a6d96afdae61d7191c", - "1a9641a6d96affffbffdae61d7191c", - "1a985091cf60d9ef8bfee08bfc8d59d73027", - "1a985091cf60d9ef8bffffbffee08bfc8d59d73027", - "1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027", - "1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027", - "0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026", - "0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PRGn.js b/dist/libs/d3-scale-chromatic/diverging/PRGn.js deleted file mode 100644 index 3be94f3..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PRGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "af8dc3f7f7f77fbf7b", - "7b3294c2a5cfa6dba0008837", - "7b3294c2a5cff7f7f7a6dba0008837", - "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", - "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", - "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", - "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", - "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", - "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PiYG.js b/dist/libs/d3-scale-chromatic/diverging/PiYG.js deleted file mode 100644 index 1d57c4f..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PiYG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e9a3c9f7f7f7a1d76a", - "d01c8bf1b6dab8e1864dac26", - "d01c8bf1b6daf7f7f7b8e1864dac26", - "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", - "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", - "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", - "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", - "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", - "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PuOr.js b/dist/libs/d3-scale-chromatic/diverging/PuOr.js deleted file mode 100644 index 924f5cb..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PuOr.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "998ec3f7f7f7f1a340", - "5e3c99b2abd2fdb863e66101", - "5e3c99b2abd2f7f7f7fdb863e66101", - "542788998ec3d8daebfee0b6f1a340b35806", - "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", - "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", - "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", - "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", - "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdBu.js b/dist/libs/d3-scale-chromatic/diverging/RdBu.js deleted file mode 100644 index f9ba196..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62f7f7f767a9cf", - "ca0020f4a58292c5de0571b0", - "ca0020f4a582f7f7f792c5de0571b0", - "b2182bef8a62fddbc7d1e5f067a9cf2166ac", - "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", - "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", - "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", - "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", - "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdGy.js b/dist/libs/d3-scale-chromatic/diverging/RdGy.js deleted file mode 100644 index 9d1a4a1..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdGy.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62ffffff999999", - "ca0020f4a582bababa404040", - "ca0020f4a582ffffffbababa404040", - "b2182bef8a62fddbc7e0e0e09999994d4d4d", - "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", - "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", - "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", - "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", - "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js deleted file mode 100644 index ef93e9d..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91bfdb", - "d7191cfdae61abd9e92c7bb6", - "d7191cfdae61ffffbfabd9e92c7bb6", - "d73027fc8d59fee090e0f3f891bfdb4575b4", - "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", - "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", - "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", - "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", - "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js deleted file mode 100644 index 2e3964d..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91cf60", - "d7191cfdae61a6d96a1a9641", - "d7191cfdae61ffffbfa6d96a1a9641", - "d73027fc8d59fee08bd9ef8b91cf601a9850", - "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", - "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", - "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", - "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", - "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/Spectral.js b/dist/libs/d3-scale-chromatic/diverging/Spectral.js deleted file mode 100644 index 0133e0a..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/Spectral.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf99d594", - "d7191cfdae61abdda42b83ba", - "d7191cfdae61ffffbfabdda42b83ba", - "d53e4ffc8d59fee08be6f59899d5943288bd", - "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", - "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", - "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", - "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", - "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/index.js b/dist/libs/d3-scale-chromatic/index.js deleted file mode 100644 index e752dc4..0000000 --- a/dist/libs/d3-scale-chromatic/index.js +++ /dev/null @@ -1,36 +0,0 @@ -export {default as schemeAccent} from "./categorical/Accent"; -export {default as schemeDark2} from "./categorical/Dark2"; -export {default as schemePaired} from "./categorical/Paired"; -export {default as schemePastel1} from "./categorical/Pastel1"; -export {default as schemePastel2} from "./categorical/Pastel2"; -export {default as schemeSet1} from "./categorical/Set1"; -export {default as schemeSet2} from "./categorical/Set2"; -export {default as schemeSet3} from "./categorical/Set3"; -export {default as interpolateBrBG, scheme as schemeBrBG} from "./diverging/BrBG"; -export {default as interpolatePRGn, scheme as schemePRGn} from "./diverging/PRGn"; -export {default as interpolatePiYG, scheme as schemePiYG} from "./diverging/PiYG"; -export {default as interpolatePuOr, scheme as schemePuOr} from "./diverging/PuOr"; -export {default as interpolateRdBu, scheme as schemeRdBu} from "./diverging/RdBu"; -export {default as interpolateRdGy, scheme as schemeRdGy} from "./diverging/RdGy"; -export {default as interpolateRdYlBu, scheme as schemeRdYlBu} from "./diverging/RdYlBu"; -export {default as interpolateRdYlGn, scheme as schemeRdYlGn} from "./diverging/RdYlGn"; -export {default as interpolateGnYlRd, scheme as schemeGnYlRd} from "./diverging/GnYlRd"; -export {default as interpolateSpectral, scheme as schemeSpectral} from "./diverging/Spectral"; -export {default as interpolateBuGn, scheme as schemeBuGn} from "./sequential-multi/BuGn"; -export {default as interpolateBuPu, scheme as schemeBuPu} from "./sequential-multi/BuPu"; -export {default as interpolateGnBu, scheme as schemeGnBu} from "./sequential-multi/GnBu"; -export {default as interpolateOrRd, scheme as schemeOrRd} from "./sequential-multi/OrRd"; -export {default as interpolatePuBuGn, scheme as schemePuBuGn} from "./sequential-multi/PuBuGn"; -export {default as interpolatePuBu, scheme as schemePuBu} from "./sequential-multi/PuBu"; -export {default as interpolatePuRd, scheme as schemePuRd} from "./sequential-multi/PuRd"; -export {default as interpolateRdPu, scheme as schemeRdPu} from "./sequential-multi/RdPu"; -export {default as interpolateYlGnBu, scheme as schemeYlGnBu} from "./sequential-multi/YlGnBu"; -export {default as interpolateYlGn, scheme as schemeYlGn} from "./sequential-multi/YlGn"; -export {default as interpolateYlOrBr, scheme as schemeYlOrBr} from "./sequential-multi/YlOrBr"; -export {default as interpolateYlOrRd, scheme as schemeYlOrRd} from "./sequential-multi/YlOrRd"; -export {default as interpolateBlues, scheme as schemeBlues} from "./sequential-single/Blues"; -export {default as interpolateGreens, scheme as schemeGreens} from "./sequential-single/Greens"; -export {default as interpolateGreys, scheme as schemeGreys} from "./sequential-single/Greys"; -export {default as interpolatePurples, scheme as schemePurples} from "./sequential-single/Purples"; -export {default as interpolateReds, scheme as schemeReds} from "./sequential-single/Reds"; -export {default as interpolateOranges, scheme as schemeOranges} from "./sequential-single/Oranges"; diff --git a/dist/libs/d3-scale-chromatic/ramp.js b/dist/libs/d3-scale-chromatic/ramp.js deleted file mode 100644 index f138a9b..0000000 --- a/dist/libs/d3-scale-chromatic/ramp.js +++ /dev/null @@ -1,5 +0,0 @@ -import d3 from 'd3'; - -export default function(scheme) { - return d3.interpolateRgbBasis(scheme[scheme.length - 1]); -} diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js deleted file mode 100644 index e7dade7..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5f999d8c92ca25f", - "edf8fbb2e2e266c2a4238b45", - "edf8fbb2e2e266c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js deleted file mode 100644 index 8aa9232..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0ecf49ebcda8856a7", - "edf8fbb3cde38c96c688419d", - "edf8fbb3cde38c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js deleted file mode 100644 index c8dae65..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0f3dba8ddb543a2ca", - "f0f9e8bae4bc7bccc42b8cbe", - "f0f9e8bae4bc7bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js deleted file mode 100644 index 3f96f7d..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee8c8fdbb84e34a33", - "fef0d9fdcc8afc8d59d7301f", - "fef0d9fdcc8afc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js deleted file mode 100644 index c279e48..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece7f2a6bddb2b8cbe", - "f1eef6bdc9e174a9cf0570b0", - "f1eef6bdc9e174a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js deleted file mode 100644 index f6d8fe0..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece2f0a6bddb1c9099", - "f6eff7bdc9e167a9cf02818a", - "f6eff7bdc9e167a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js deleted file mode 100644 index fe762d2..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e7e1efc994c7dd1c77", - "f1eef6d7b5d8df65b0ce1256", - "f1eef6d7b5d8df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js deleted file mode 100644 index 748939c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fde0ddfa9fb5c51b8a", - "feebe2fbb4b9f768a1ae017e", - "feebe2fbb4b9f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js deleted file mode 100644 index aaacd6c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f7fcb9addd8e31a354", - "ffffccc2e69978c679238443", - "ffffccc2e69978c67931a354006837", - "ffffccd9f0a3addd8e78c67931a354006837", - "ffffccd9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js deleted file mode 100644 index eb009ef..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "edf8b17fcdbb2c7fb8", - "ffffcca1dab441b6c4225ea8", - "ffffcca1dab441b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js deleted file mode 100644 index 2fc1aa1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fff7bcfec44fd95f0e", - "ffffd4fed98efe9929cc4c02", - "ffffd4fed98efe9929d95f0e993404", - "ffffd4fee391fec44ffe9929d95f0e993404", - "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js deleted file mode 100644 index d34cca6..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ffeda0feb24cf03b20", - "ffffb2fecc5cfd8d3ce31a1c", - "ffffb2fecc5cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js deleted file mode 100644 index cb36bf7..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "deebf79ecae13182bd", - "eff3ffbdd7e76baed62171b5", - "eff3ffbdd7e76baed63182bd08519c", - "eff3ffc6dbef9ecae16baed63182bd08519c", - "eff3ffc6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js deleted file mode 100644 index 074f5bf..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5e0a1d99b31a354", - "edf8e9bae4b374c476238b45", - "edf8e9bae4b374c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js deleted file mode 100644 index ae5a0b4..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f0f0f0bdbdbd636363", - "f7f7f7cccccc969696525252", - "f7f7f7cccccc969696636363252525", - "f7f7f7d9d9d9bdbdbd969696636363252525", - "f7f7f7d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js deleted file mode 100644 index a4babe1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee6cefdae6be6550d", - "feeddefdbe85fd8d3cd94701", - "feeddefdbe85fd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js deleted file mode 100644 index d9810e1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "efedf5bcbddc756bb1", - "f2f0f7cbc9e29e9ac86a51a3", - "f2f0f7cbc9e29e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js deleted file mode 100644 index 447084c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee0d2fc9272de2d26", - "fee5d9fcae91fb6a4acb181d", - "fee5d9fcae91fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" -).map(colors); - -export default ramp(scheme); diff --git a/dist/light.js.map b/dist/light.js.map new file mode 100644 index 0000000..370d087 --- /dev/null +++ b/dist/light.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s"],"mappings":"sCACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,I","file":"light.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/module.js.map b/dist/module.js.map index 9efa318..b8acd2a 100644 --- a/dist/module.js.map +++ b/dist/module.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"lodash\"","webpack:///external \"d3\"","webpack:///external \"jquery\"","webpack:///external \"app/core/utils/kbn\"","webpack:///external \"app/core/core\"","webpack:///external \"app/plugins/sdk\"","webpack:///external \"app/core/core_module\"","webpack:///external \"moment\"","webpack:///external \"app/core/utils/ticks\"","webpack:///../node_modules/tslib/tslib.es6.js","webpack:///../node_modules/d3-scale-chromatic/src/colors.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/define.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/constant.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/rgb.js","webpack:///../node_modules/d3-scale-chromatic/src/ramp.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basisClosed.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/math.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack:///./d3/d3-scale-chromatic.ts","webpack:///./libs/grafana/events/events.ts","webpack:///./libs/grafana/events/panelEvents.ts","webpack:///./color_legend.ts","webpack:///./options_editor.ts","webpack:///./tooltip_editor.ts","webpack:///./panel_config_migration.ts","webpack:///./statusmap_data.ts","webpack:///./tooltip.ts","webpack:///./annotations.ts","webpack:///./rendering.ts","webpack:///./libs/polygrafill/funcs.ts","webpack:///./color_mode_discrete.ts","webpack:///./module.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__10__","extendStatics","b","setPrototypeOf","__proto__","Array","__assign","assign","arguments","length","apply","this","__values","iterator","next","done","TypeError","specifier","colors","slice","constructor","factory","extend","parent","definition","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","NaN","g","a","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","Math","max","min","round","toString","h","Hsl","hslConvert","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","copy","channels","displayable","formatHsl","brighter","k","pow","darker","x","linear","gamma","y","nogamma","exponential","constant","color","start","end","rgbGamma","rgbSpline","spline","rgbBasis","values","floor","scheme","concat","map","ramp","radians","PI","degrees","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","sqrt","atan2","hue","cubehelixGamma","cubehelix","cosh","cos","sinh","sin","cubehelixLong","warm","cool","ts","abs","pi_1_3","pi_2_3","range","magma","inferno","plasma","GnYlRdScheme","GnYlRd","d3ScaleChromatic","interpolateGnYlRd","graphHover","graphHoverClear","fallbackToStringEvents","refresh","dataError","dataReceived","dataSnapshotLoad","editModeInitialized","drawLegendValues","elem","colorScale","rangeFrom","rangeTo","maxValue","minValue","legendWidth","legendElem","find","legend","childNodes","legendValueScale","domain","ticks","tickStepSize","ticksNum","current","isValueCloseTo","push","sortBy","uniq","buildLegendTicks","xAxis","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","append","attr","select","remove","clearLegend","empty","getColorScale","colorScheme","colorInterpolator","colorScaleInverted","invert","user","lightTheme","svgElem","baseVal","height","val","valueTo","step","directive","restrict","template","link","scope","attrs","ctrl","panel","render","outerWidth","colorSchemes","legendHeight","valuesRange","selectAll","data","enter","LEGEND_STEP_WIDTH","drawSimpleColorLegend","colorOptions","options","exponent","cardColor","style","drawSimpleOpacityLegend","events","on","show","bucketMatrix","noDatapoints","rangeStep","widthFactor","drawColorLegend","opacityScale","legendOpacityScale","getOpacityScale","drawOpacityLegend","discreteExtraSeries","thresholds","tooltips","tr","valuesNumber","graphWidthAttr","graphWidth","textWidth","text","each","thisWidth","getBBox","width","itemWidth","getDiscreteColor","thresholdValues","thresholdTooltips","tooltip","tickFormat","valueOf","v","undefined","drawDiscreteLegendValues","drawDiscreteColorLegend","$scope","editor","panelCtrl","unitFormats","getUnitFormats","setUnitFormat","subItem","unitFormat","onAddThreshold","defaultColor","onRemoveThreshold","index","splice","onRemoveThresholds","onAddThreeLights","onAddSolarized","optionsEditorCtrl","templateUrl","controller","emptyTooltipItem","urlText","urlTemplate","urlIcon","urlToLowerCase","valueDateFormat","onAddUrl","items","onRemoveUrl","onRemoveUrls","getFAIconClasses","getValueDateFormats","tooltipEditorCtrl","TooltipEditorCtrl","migratePanelConfig","has","statusmap","ConfigVersion","labelFormat","minBucketWidthToShowWeekends","showCrosshair","showWeekends","yAxis","cards","cardSpacing","cardVSpacing","cardHSpacing","freezeOnClick","usingUrl","hasRealItems","urls","url","base_url","label","showItems","item","icon_fa","forcelowercase","replace","valueVar","useExtraSeries","extraSeries","migrate_V0_V1","id","columns","multipleValues","noColorDefined","yLabel","pLabels","xid","from","to","relFrom","relTo","mostRecent","belong","put","isEmpty","buckets","targets","rangeMs","intervalMs","xBucketSize","yid","Bucket","hasData","target","defaultPageSize","pageSize","currentPage","BucketMatrix","enable","me","rowLabel","setEnable","setCurrent","num","setDefaultPageSize","setPageSize","pages","ceil","totalRows","pageStartRow","pageEndRow","last","hasNext","hasPrev","switchToNext","switchToPrev","dashboard","panelElem","mouseOverBucket","originalFillColor","onMouseOver","onMouseLeave","e","add","move","destroy","onMouseMove","removeFrozen","tooltipFrozen","showFrozen","pos","displayTooltip","moveRelative","panelRelY","frozen","cardEl","bucket","timestamp","tooltipClose","tooltipHtml","formatDate","statuses","statusTitle","seriesFilterIndex","convertValueToTooltips","convertValuesToTooltips","join","JSON","parse","stringify","scopedVars","retrieveTimeVar","dateFormat","templateSrv","truncate","showCustomContent","customContent","useMax","dataWarnings","title","badValues","getNotColoredValues","html","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","panelX","offset","panelY","panelWidth","panelHeight","tooltipLeft","tooltipTop","mouseOverAnnotationTick","tooltipBase","annoId","anno","annotations","annoTime","time","annoText","annoTags","tags","backColor","borderColor","chartWidth","chartHeight","chartTop","chartBottom","yAxisWidth","xAxisHeight","cardRound","cardWidth","cardHeight","xGridSize","yGridSize","dataRangeWidingFactor","$heatmap","annotationTooltip","yOffset","selection","active","x1","x2","padding","right","bottom","margin","onRender","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseClick","clearCrosshair","event","drawSharedCrosshair","renderingCompleted","setElementHeight","row","isString","usingPagination","css","getYAxisWidth","axisText","nodes","maxTextWidth","getXAxisHeight","axisLinePosition","parseFloat","addXAxis","xScale","timeRange","timeFormat","grafanaTimeFormatter","secPerTick","grafanaTimeFormat","getTimezone","tickPadding","heatmap","getYScale","getYAxisScale","addYAxis","bucketMatrixPager","yAxisSort","sort","localeCompare","ignorePunctuation","numeric","yAxisScale","yScale","tickSizeInner","wideYAxisRange","tickInterval","y_min","y_max","y_widing","decimals","scaledDecimals","valueFormats","addStatusmapCanvas","heatmap_elem","insert","addStatusmap","setOpacityScale","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","highlightCard","resetCardHighLight","_renderAnnotations","emit","renderComplete","highlightColor","strokeColor","current_card","cx","w","cutted_width","ys","getBucketColorSingle","getBucketColor","nullPointMode","getCardStrokeWidth","getEventOffset","elemOffset","clientX","clientY","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","getEventPos","y1","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","annoData","source","hasAppEventCompatibleEmitter","emitter","emitterProto","getPrototypeOf","receiveEvents","eventId","removeAllListeners","j","getNotMatchedValues","notMatched","getMatchedThreshold","threshold","getThreshold","isAllValuesNulls","updateCardsValuesHasColorInfoSingle","updateCardsValuesHasColorInfo","roundIntervalCeil","interval","colorModes","opacityScales","dark","light","$injector","annotationsSrv","pageSizeViewer","panelDefaults","datasource","cardMinWidth","minWidth","maxWidth","showExtraInfo","extraInfo","usingSplitLabel","delimiter","labelTemplate","highlightCards","interval_to_ms","intervalToMs","defaultsDeep","BucketMatrixPager","pager","graph","ColorModeDiscrete","tip","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onCardColorChange","__","changeDefaultPaginationSize","onChangePageSize","onPrevPage","onNextPage","getChartWidth","wndWidth","$","panelWidthFactor","gridPos","updateTimeRange","ret","calculateInterval","minCardWidth","minSpacing","maxCardsCount","lowLimitMs","intervalOverride","secondsToHms","issueQueries","annotationsPromise","getAnnotations","datasourcePromises","then","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","result","loading","addEditorTab","newColor","rendering","timeRangeForUrl","mostRecentBucket","targetIndex","targetPartials","queryResult","split","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","datapoints","datapoint","idx","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","bucketFrom","Number","MAX_VALUE","MIN_SAFE_INTEGER","dataIndex","dp","bucketsLen"],"mappings":"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","file":"module.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import * as d3 from 'd3';\nimport * as d3ScaleChromaticOrig from 'd3-scale-chromatic';\n\nlet GnYlRdScheme = new Array(3)\n .concat(\n '91cf60ffffbffc8d59',\n '1a9641a6d96afdae61d7191c',\n '1a9641a6d96affffbffdae61d7191c',\n '1a985091cf60d9ef8bfee08bfc8d59d73027',\n '1a985091cf60d9ef8bffffbffee08bfc8d59d73027',\n '1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027',\n '1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027',\n '0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026',\n '0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026'\n )\n .map(function(specifier) {\n var n = (specifier.length / 6) | 0,\n colors = new Array(n),\n i = 0;\n while (i < n) {\n colors[i] = '#' + specifier.slice(i * 6, ++i * 6);\n }\n return colors;\n });\n\nlet GnYlRd = d3.interpolateRgbBasis(GnYlRdScheme[GnYlRdScheme.length - 1]);\n\nlet d3ScaleChromatic = {\n ...d3ScaleChromaticOrig,\n interpolateGnYlRd: GnYlRd,\n};\n\nexport { d3ScaleChromatic };\n","import { AppEvent } from './appEvents';\n\nexport interface GraphHoverPayload {\n pos: any;\n panel: {\n id: number;\n };\n}\n\nexport var graphHover: AppEvent | string = { name: 'graph-hover' };\nexport var graphHoverClear: AppEvent | string = { name: 'graph-hover-clear' };\n\nexport function fallbackToStringEvents() {\n graphHover = 'graph-hover';\n graphHoverClear = 'graph-hover-clear';\n}\n","import { AppEvent } from './appEvents';\n\nexport interface DataQueryError {\n data?: {\n message?: string;\n error?: string;\n };\n message?: string;\n status?: string;\n statusText?: string;\n refId?: string;\n cancelled?: boolean;\n}\n\nexport var refresh: AppEvent | string = { name: 'refresh' };\nexport var render: AppEvent | string = { name: 'render' };\nexport var dataError: AppEvent | string = { name: 'data-error' };\nexport var dataReceived: AppEvent | string = { name: 'data-received' };\nexport var dataSnapshotLoad: AppEvent | string = { name: 'data-snapshot-load' };\nexport var editModeInitialized: AppEvent | string = { name: 'init-edit-mode' };\n\nexport function fallbackToStringEvents() {\n refresh = 'refresh';\n render = 'render';\n dataError = 'data-error';\n dataReceived = 'data-received';\n dataSnapshotLoad = 'data-snapshot-load';\n editModeInitialized = 'init-edit-mode';\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './d3/d3-scale-chromatic';\nimport { contextSrv } from 'grafana/app/core/core';\nimport { tickStep } from 'grafana/app/core/utils/ticks';\nimport coreModule from 'grafana/app/core/core_module';\n\nimport { StatusHeatmapCtrl } from './module';\nimport { PanelEvents } from './libs/grafana/events/index';\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Bigger color legend for opacity and spectrum modes editor.\n */\ncoreModule.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope: any, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n },\n };\n});\n\n/**\n * Graph legend with values.\n */\ncoreModule.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl: StatusHeatmapCtrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return;\n }\n if (ctrl.bucketMatrix) {\n let rangeFrom = ctrl.bucketMatrix.minValue;\n let rangeTo = ctrl.bucketMatrix.maxValue;\n let maxValue = panel.color.max != null ? panel.color.max : rangeTo;\n let minValue = panel.color.min != null ? panel.color.min : rangeFrom;\n\n if (ctrl.bucketMatrix.noDatapoints) {\n if (panel.color.max != null) {\n rangeTo = maxValue = 100;\n } else {\n rangeTo = 100;\n }\n if (panel.color.min != null) {\n rangeFrom = minValue = 0;\n } else {\n rangeFrom = 0;\n }\n }\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteExtraSeries);\n }\n }\n }\n },\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom: number, rangeTo: number, maxValue: number, minValue: number) {\n let legendElem = $(elem).find('svg');\n let legend: any = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr('height');\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => (d - rangeFrom) * widthFactor + 10)\n .attr('y', 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr('height');\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => d * widthFactor + 10)\n .attr('y', 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', options.cardColor)\n .style('opacity', d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteExtraSeries) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n const $heatmap = $(elem)\n .parent()\n .parent()\n .parent()\n .find('.statusmap-panel');\n const graphWidthAttr = $heatmap.find('svg').attr('width');\n let graphWidth = parseInt(graphWidthAttr, 10);\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth: number[] = [];\n legend\n .selectAll('.hidden-texts')\n .data(tooltips)\n .enter()\n .append('text')\n .attr('class', 'axis tick hidden-texts')\n .attr('font-family', 'sans-serif')\n .text(d => d)\n .each(function(d, i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n });\n legend.selectAll('.hidden-texts').remove();\n\n let legendWidth = Math.floor(_.min([graphWidth - 30, (_.max(textWidth)! + 3) * valuesNumber])!);\n legendElem.attr('width', legendWidth);\n\n let legendHeight = legendElem.attr('height');\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d * itemWidth)\n .attr('y', 0)\n .attr('width', itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => discreteExtraSeries.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\nfunction drawLegendValues(\n elem,\n colorScale,\n rangeFrom: number,\n rangeTo: number,\n maxValue: number,\n minValue: number,\n legendWidth: number\n) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3\n .scaleLinear()\n .domain([rangeFrom, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue);\n let xAxis = d3\n .axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(':first-child');\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n //let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n let legendValueScale = d3\n .scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3\n .axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat(t => {\n let i = Math.floor(t.valueOf());\n let v = thresholdTooltips[i];\n if (v !== undefined) {\n return '' + v;\n } else {\n v = thresholdValues[i];\n if (v !== undefined) {\n return '' + v;\n } else {\n return 'n/a';\n }\n }\n });\n\n let colorRect = legendElem.find(':first-child');\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep / 2);\n\n d3.select(legendElem.get(0))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr('height');\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d)\n .attr('y', 0)\n .attr('width', LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr('height');\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3\n .scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d)\n .attr('y', 0)\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', options.cardColor)\n .style('opacity', d => legendOpacityScale(d));\n }\n}\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3\n .scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks: any = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i + rangeFrom;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(current);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n","import kbn from 'grafana/app/core/utils/kbn';\nimport { StatusHeatmapCtrl } from './module';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n unitFormats: any;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n\n this.unitFormats = kbn.getUnitFormats();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddThreshold() {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n }\n\n onRemoveThreshold(index: number) {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n }\n\n onRemoveThresholds() {\n this.panel.color.thresholds = [];\n this.render();\n }\n\n onAddThreeLights() {\n this.panel.color.thresholds.push({ color: 'red', value: 2, tooltip: 'error' });\n this.panel.color.thresholds.push({ color: 'yellow', value: 1, tooltip: 'warning' });\n this.panel.color.thresholds.push({ color: 'green', value: 0, tooltip: 'ok' });\n this.render();\n }\n\n /* https://ethanschoonover.com/solarized/ */\n onAddSolarized() {\n this.panel.color.thresholds.push({ color: '#b58900', value: 0, tooltip: 'yellow' });\n this.panel.color.thresholds.push({ color: '#cb4b16', value: 1, tooltip: 'orange' });\n this.panel.color.thresholds.push({ color: '#dc322f', value: 2, tooltip: 'red' });\n this.panel.color.thresholds.push({ color: '#d33682', value: 3, tooltip: 'magenta' });\n this.panel.color.thresholds.push({ color: '#6c71c4', value: 4, tooltip: 'violet' });\n this.panel.color.thresholds.push({ color: '#268bd2', value: 5, tooltip: 'blue' });\n this.panel.color.thresholds.push({ color: '#2aa198', value: 6, tooltip: 'cyan' });\n this.panel.color.thresholds.push({ color: '#859900', value: 7, tooltip: 'green' });\n this.render();\n }\n}\n\n/** @ngInject */\nexport function optionsEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/options_editor.html',\n controller: StatusHeatmapOptionsEditorCtrl,\n };\n}\n","import { StatusHeatmapCtrl } from './module';\n\nlet emptyTooltipItem = {\n urlText: '',\n urlTemplate: '',\n urlIcon: 'external-link',\n urlToLowerCase: true,\n valueDateFormat: '',\n};\n\nexport class TooltipEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddUrl() {\n this.panel.tooltip.items.push(Object.assign({}, emptyTooltipItem));\n this.render();\n }\n\n onRemoveUrl(index: number) {\n this.panel.tooltip.items.splice(index, 1);\n this.render();\n }\n\n onRemoveUrls() {\n this.panel.tooltip.items = [];\n this.render();\n }\n\n getFAIconClasses() {\n return ['external-link', 'plus', 'anchor', 'ban', 'globe', 'gear', 'cloud', 'download', 'cloud-download'];\n }\n\n getValueDateFormats() {\n return ['YYYY/MM/DD/HH_mm_ss', 'YYYYMMDDHHmmss', 'YYYY-MM-DD-HH-mm-ss'];\n }\n}\n\nexport function tooltipEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/tooltip_editor.html',\n controller: TooltipEditorCtrl,\n };\n}\n","import _ from 'lodash';\n\nfunction migrate_V0_V1(panel: any) {\n // Remove unused fields.\n if (_.has(panel, 'xAxis.labelFormat')) {\n delete panel.xAxis.labelFormat;\n }\n if (_.has(panel, 'xAxis.minBucketWidthToShowWeekends')) {\n delete panel.xAxis.minBucketWidthToShowWeekends;\n }\n if (_.has(panel, 'xAxis.showCrosshair')) {\n delete panel.xAxis.showCrosshair;\n }\n if (_.has(panel, 'xAxis.showWeekends')) {\n delete panel.xAxis.showWeekends;\n }\n if (_.has(panel, 'yAxis.showCrosshair')) {\n delete panel.yAxis.showCrosshair;\n }\n if (_.has(panel, 'data.unitFormat')) {\n delete panel.data;\n }\n\n // Migrate cardSpacing value. Seems rare (update from version 0.0.2).\n if (_.has(panel, 'cards.cardSpacing')) {\n if (!_.has(panel, 'cards.cardVSpacing')) {\n if (panel.cards.cardSpacing) {\n panel.cards.cardVSpacing = panel.cards.cardSpacing;\n panel.cards.cardHSpacing = panel.cards.cardSpacing;\n }\n }\n delete panel.cards.cardSpacing;\n }\n\n // Migrate initial config for urls in tooltip (pull/86).\n // 'usingUrl' was used to show tooltip with urls on click or not.\n if (_.has(panel, 'usingUrl')) {\n if (!_.has(panel, 'tooltip.freezeOnClick')) {\n panel.tooltip.freezeOnClick = panel.usingUrl;\n }\n delete panel.usingUrl;\n }\n\n // 'urls' array is now tooltip.items array. Also items are changed.\n if (_.has(panel, 'urls')) {\n if (!_.has(panel, 'tooltip.items')) {\n panel.tooltip.items = [];\n let hasRealItems = true;\n if (panel.urls.length === 0) {\n hasRealItems = false;\n }\n if (panel.urls.length === 1) {\n let url = panel.urls[0];\n if (url.base_url === '' && url.label === '') {\n hasRealItems = false;\n }\n }\n if (hasRealItems) {\n panel.tooltip.showItems = true;\n for (let url of panel.urls) {\n let item = {\n urlTemplate: _.toString(url.base_url),\n urlText: _.toString(url.label),\n urlIcon: _.toString(url.icon_fa),\n urlToLowerCase: url.forcelowercase,\n valueDateFormat: '',\n };\n // replace $vars with new ${__vars} if url template is not empty\n if (item.urlTemplate !== '') {\n // $time was a graph time with prepended &\n item.urlTemplate = _.replace(url.base_url, /\\$time/g, '&${__url_time_range}');\n // $series_label was a y axis label\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_label/, '${__y_label}');\n // $series_extra was a value from bucket. This value has format options and index.\n let valueVar = '__value';\n if (url.useExtraSeries === true) {\n // index?\n if (url.extraSeries.index > -1) {\n valueVar += '_' + url.extraSeries.index;\n }\n\n let format = _.toString(url.extraSeries.format);\n if (format === 'YYYY/MM/DD/HH_mm_ss') {\n valueVar += '_date';\n item.valueDateFormat = format;\n }\n }\n\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_extra/, `\\${${valueVar}}`);\n }\n panel.tooltip.items.push(item);\n }\n }\n }\n delete panel.urls;\n }\n\n // create statusmap metadata\n panel.statusmap = {\n ConfigVersion: 'v1',\n };\n}\n\nexport function migratePanelConfig(panel: any) {\n if (_.has(panel, 'statusmap')) {\n if (panel.statusmap.ConfigVersion === 'v1') {\n return;\n }\n } else {\n migrate_V0_V1(panel);\n }\n return;\n}\n","// A holder of a group of values\nclass Bucket {\n // uniq id\n id = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues = false;\n // a bucket has values that has no mapped color\n noColorDefined = false;\n // y label\n y = '';\n yLabel = '';\n pLabels: string[] = [];\n\n // This value can be used to calculate a x coordinate on a graph\n x = 0;\n xid = 0;\n // a time range of this bucket\n from = 0;\n to = 0;\n // to and from relative to real \"from\"\n relFrom = 0;\n relTo = 0;\n\n mostRecent = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue = 0;\n maxValue = 0;\n // A value if multiple values is not allowed\n value = 0;\n\n constructor() {}\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length === 0;\n }\n}\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: { [yLabel: string]: Bucket[] } = {};\n maxValue = 0;\n minValue = 0;\n multipleValues = false;\n noColorDefined = false;\n // a flag that indicate that buckets has stub values\n noDatapoints = false;\n\n // An array of row labels\n targets: string[] = [];\n pLabels: { [target: string]: string[] } = {};\n rangeMs = 0;\n intervalMs = 0;\n\n xBucketSize = 0; // TODO remove: a transition from CardsData\n\n constructor() {}\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target: string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged: any = { name: 'statusmap-pager-changed' };\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize = -1;\n pageSize = -1;\n currentPage = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage + 1));\n }\n\n buckets(): { [yLabel: string]: Bucket[] } {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: { [yLabel: string]: Bucket[] } = {};\n let me = this;\n\n this.targets().map(function(rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n });\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return this.pageSize * this.currentPage + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage + 1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage + 1) * this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n}\n\nexport { Bucket, BucketMatrix, BucketMatrixPager };\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on('mouseover', this.onMouseOver.bind(this));\n elem.on('mouseleave', this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3\n .select('body')\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null;\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3\n .select(this.panelElem[0])\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip statusmap-tooltip-frozen');\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n // @ts-ignore\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let pLabels = bucket.pLabels;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n\n let statusTitle = 'status:';\n if (statuses.length > 1) {\n statusTitle = 'statuses:';\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(\n _.map(\n statuses,\n v => `
  • ${v.tooltip}
  • `\n ),\n ''\n )}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(\n _.map(values, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = { value: bucket.values[i] };\n }\n scopedVars['__value'] = { value: bucket.value };\n scopedVars['__y_label'] = { value: yLabel };\n scopedVars['__y_label_trim'] = { value: yLabel.trim() };\n // Grafana 7.0 compatible\n scopedVars['__url_time_range'] = { value: this.panelCtrl.retrieveTimeVar() };\n\n //New vars based on partialLabels:\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = '#';\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat === '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = { value: this.dashboard.formatDate(+bucket.values[i], dateFormat) };\n }\n scopedVars['__value_date'] = { value: this.dashboard.formatDate(+bucket.value, dateFormat) };\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars);\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? 'Empty URL' : _.truncate(item.link);\n }\n }\n\n if (this.panel.tooltip.showCustomContent) {\n let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars);\n tooltipHtml += `
${customContent}
`;\n }\n\n tooltipHtml += _.join(\n _.map(\n items,\n v => `\n
\n \n
\n
`\n ),\n '\\n'\n );\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(\n _.map(badValues, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on('click', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mousedown', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mouseup', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n });\n\n // Activate close button\n tooltip.select('a.tooltip-close').on('click', this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip.style('left', left + 'px').style('top', top + 'px');\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style('left', tooltipLeft + 'px')\n .style('top', tooltipTop + 'px')\n .style('width', tooltipWidth + 'px');\n }\n}\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 10;\n\nexport class AnnotationTooltip {\n scope: any;\n dashboard: any;\n panelCtrl: any;\n panel: any;\n mouseOverAnnotationTick: boolean;\n\n tooltipBase: any;\n tooltip: any;\n\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.mouseOverAnnotationTick = false;\n\n elem.on('mouseover', this.onMouseOver.bind(this));\n elem.on('mouseleave', this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3\n .select('body')\n .append('div')\n .attr(\n 'class',\n 'statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open'\n )\n .style('position', 'absolute');\n this.tooltip = this.tooltipBase\n .append('div')\n .attr('class', 'drop-content')\n .append('div')\n .append('annotation-tooltip')\n .append('div')\n .attr('class', 'graph-annotation');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n\n if (this.tooltipBase) {\n this.tooltipBase.remove();\n }\n\n this.tooltipBase = null;\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n // shared tooltip mode\n //if (pos.panelRelY) {\n // return;\n //}\n\n let annoId = d3.select(pos.target).attr('annoId');\n if (!annoId) {\n this.destroy();\n return;\n }\n\n let anno = this.panelCtrl.annotations[annoId];\n if (!anno) {\n this.destroy();\n return;\n }\n\n let annoTitle = '';\n\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);\n let annoText = anno.text;\n let annoTags: any = [];\n if (anno.tags) {\n annoTags = _.map(anno.tags, t => ({ text: t, backColor: 'rgb(63, 43, 91)', borderColor: 'rgb(101, 81, 129)' }));\n }\n\n let tooltipHtml = `
\n ${annoTitle}\n ${annoTime}
\n
\n
${annoText}
\n ${_.join(\n _.map(\n annoTags,\n t =>\n `${t.text}`\n ),\n ''\n )}\n
\n
`;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) {\n return;\n }\n\n let elem = $(this.tooltipBase.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX - tooltipWidth / 2;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth / 2 + 10 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltipBase.style('left', left + 'px').style('top', top + 'px');\n }\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\n\n// TODO moment is used instead of @grafana/data to run in 6.2 and earlier.\n/* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */\nimport moment from 'moment';\n\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { appEvents, contextSrv } from 'grafana/app/core/core';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './d3/d3-scale-chromatic';\nimport { StatusmapTooltip } from './tooltip';\nimport { AnnotationTooltip } from './annotations';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport { StatusHeatmapCtrl, renderComplete } from './module';\nimport { CoreEvents, PanelEvents } from './libs/grafana/events/index';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n // @ts-ignore\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {\n return new StatusmapRenderer(scope, elem, attrs, ctrl);\n}\n\n// @ts-ignore\nclass Statusmap {\n $svg: any;\n svg: any;\n bucketMatrix: BucketMatrix;\n\n timeRange: { from: number; to: number } = { from: 0, to: 0 };\n\n constructor() {}\n}\n\nexport class StatusmapRenderer {\n width = 0;\n height = 0;\n yScale: any;\n xScale: any;\n chartWidth = 0;\n chartHeight = 0;\n chartTop = 0;\n chartBottom = 0;\n yAxisWidth = 0;\n xAxisHeight = 0;\n cardVSpacing = 0;\n cardHSpacing = 0;\n cardRound = 0;\n cardWidth = 0;\n cardHeight = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize = 0;\n yGridSize = 0;\n\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n panel: any;\n $heatmap: any;\n tooltip: StatusmapTooltip;\n annotationTooltip: AnnotationTooltip;\n heatmap: any;\n timeRange: any;\n\n yOffset: number;\n selection: any;\n padding: any;\n margin: any;\n dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;\n\n constructor(private scope: any, private elem: any, attrs: any, private ctrl: StatusHeatmapCtrl) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.statusmap-panel');\n this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);\n this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);\n\n this.yOffset = 0;\n\n this.selection = {\n active: false,\n x1: -1,\n x2: -1,\n };\n\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\n this.margin = { left: 25, right: 15, top: 10, bottom: 20 };\n\n this.ctrl.events.on(PanelEvents.render, this.onRender.bind(this));\n\n // @ts-ignore\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip this.empty = true;\n\n appEvents.on(CoreEvents.graphHover, this.onGraphHover.bind(this), this.scope);\n\n appEvents.on(CoreEvents.graphHoverClear, this.onGraphHoverClear.bind(this), this.scope);\n\n // Register selection listeners\n this.$heatmap.on('mousedown', this.onMouseDown.bind(this));\n this.$heatmap.on('mousemove', this.onMouseMove.bind(this));\n this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));\n this.$heatmap.on('click', this.onMouseClick.bind(this));\n }\n\n onGraphHoverClear() {\n this.clearCrosshair();\n }\n\n onGraphHover(event: { pos: any }) {\n this.drawSharedCrosshair(event.pos);\n }\n\n onRender() {\n this.render();\n this.ctrl.renderingCompleted();\n }\n\n setElementHeight(): boolean {\n try {\n var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n if (this.panel.usingPagination) {\n // TODO get height of pagination controls.\n // reserve height for legend and for a row of pagination controls.\n height -= this.panel.legend.show ? 70 : 40; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n } else {\n // reserve height for legend\n height -= this.panel.legend.show ? 32 : 4; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n }\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) {\n // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any): number {\n const axisText = elem.selectAll('.axis-y text').nodes();\n const maxTextWidth = _.max(\n _.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n })\n );\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any): number {\n let axisLine = elem.select('.axis-x line');\n if (!axisLine.empty()) {\n let axisLinePosition = parseFloat(elem.select('.axis-x line').attr('y2'));\n let canvasWidth = parseFloat(elem.attr('height'));\n return canvasWidth - axisLinePosition;\n } else {\n // Default height\n return 30;\n }\n }\n\n addXAxis() {\n // Scale timestamps to cards centers\n //this.scope.xScale = this.xScale = d3.scaleTime()\n // .domain([this.timeRange.from, this.timeRange.to])\n // .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n // Buckets without the most recent\n this.scope.xScale = this.xScale = d3\n .scaleTime()\n .domain([this.timeRange.from, this.timeRange.to])\n .range([this.xGridSize / 2, this.chartWidth - this.xGridSize / 2]);\n\n let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);\n let timeFormat;\n let dashboardTimeZone = this.ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3\n .axisBottom(this.xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(this.chartHeight);\n\n let posY = this.chartTop; // this.margin.top !\n let posX = this.yAxisWidth;\n\n this.heatmap\n .append('g')\n .attr('class', 'axis axis-x')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n this.heatmap\n .select('.axis-x')\n .select('.domain')\n .remove();\n }\n\n // divide chart height by ticks for cards drawing\n getYScale(ticks: any[]) {\n let range: any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i + 1));\n }\n return d3\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks: any[]) {\n let range: any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(this.yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + this.yOffset);\n }\n return d3\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = this.bucketMatrixPager.targets();\n\n // TODO move sorting into bucketMatrixPager.\n if (this.panel.yAxisSort === 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true }));\n } else if (this.panel.yAxisSort === 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true }));\n }\n\n let yAxisScale = this.getYAxisScale(ticks);\n this.scope.yScale = this.yScale = this.getYScale(ticks);\n\n let yAxis = d3\n // @ts-ignore\n .axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - this.width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n this.heatmap\n .append('g')\n .attr('class', 'axis axis-y')\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = this.margin.top;\n let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.heatmap.select('.axis-y').attr('transform', 'translate(' + posX + ',' + posY + ')');\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n this.heatmap\n .select('.axis-y')\n .select('.domain')\n .remove();\n this.heatmap\n .select('.axis-y')\n .selectAll('.tick line')\n .remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min: number, max: number, tickInterval: number) {\n let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * this.dataRangeWidingFactor;\n y_min = min - min * (this.dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return { y_min, y_max };\n }\n\n tickValueFormatter(decimals, scaledDecimals = null) {\n let format = this.panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n addStatusmapCanvas() {\n let heatmap_elem = this.$heatmap[0];\n\n this.width = Math.floor(this.$heatmap.width()) - this.padding.right;\n this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;\n\n if (this.heatmap) {\n this.heatmap.remove();\n }\n\n // Insert svg as a first child into heatmap_elem\n // as the frozen tooltip moving logiс assumes that tooltip is the last child.\n this.heatmap = d3\n .select(heatmap_elem)\n .insert('svg', ':first-child')\n .attr('width', this.width)\n .attr('height', this.height);\n\n this.chartHeight = this.height - this.margin.top - this.margin.bottom;\n this.chartTop = this.margin.top;\n this.chartBottom = this.chartTop + this.chartHeight;\n\n this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;\n this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;\n this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n this.yGridSize = this.chartHeight;\n if (this.bucketMatrixPager.targets().length > 0) {\n this.yGridSize = Math.floor(this.chartHeight / this.bucketMatrixPager.targets().length);\n }\n this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;\n this.yOffset = this.cardHeight / 2;\n\n this.addYAxis();\n\n this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.chartWidth = this.width - this.yAxisWidth - this.margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n this.xGridSize = this.chartWidth / (this.bucketMatrix.xBucketSize + 1);\n this.cardWidth = this.xGridSize - this.cardHSpacing;\n\n this.addXAxis();\n this.xAxisHeight = this.getXAxisHeight(this.heatmap);\n\n if (!this.panel.yAxis.show) {\n this.heatmap\n .select('.axis-y')\n .selectAll('line')\n .style('opacity', 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap\n .select('.axis-x')\n .selectAll('line')\n .style('opacity', 0);\n }\n }\n\n addStatusmap(): void {\n let maxValue = this.panel.color.max != null ? this.panel.color.max : this.bucketMatrix.maxValue;\n let minValue = this.panel.color.min != null ? this.panel.color.min : this.bucketMatrix.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n // Draw cards from buckets.\n this.heatmap\n .selectAll('.statusmap-cards-row')\n .data(this.bucketMatrixPager.targets())\n .enter()\n .selectAll('.statustmap-card')\n .data((target: string) => this.bucketMatrix.buckets[target])\n .enter()\n .append('rect')\n .attr('cardId', (b: Bucket) => b.id)\n .attr('xid', (b: Bucket) => b.xid)\n .attr('yid', (b: Bucket) => b.yLabel)\n .attr('x', this.getCardX.bind(this))\n .attr('width', this.getCardWidth.bind(this))\n .attr('y', this.getCardY.bind(this))\n .attr('height', this.getCardHeight.bind(this))\n .attr('rx', this.cardRound)\n .attr('ry', this.cardRound)\n .attr('class', (b: Bucket) => (b.isEmpty() ? 'empty-card' : 'bordered statusmap-card'))\n .style('fill', this.getCardColor.bind(this))\n .style('stroke', this.getCardColor.bind(this))\n .style('stroke-width', 0)\n //.style('stroke-width', getCardStrokeWidth)\n //.style('stroke-dasharray', '3,3')\n .style('opacity', this.getCardOpacity.bind(this));\n\n // Set mouse events on cards.\n let $cards = this.$heatmap.find('.statusmap-card + .bordered');\n $cards\n .on('mouseenter', event => {\n this.tooltip.mouseOverBucket = true;\n this.highlightCard(event);\n })\n .on('mouseleave', event => {\n this.tooltip.mouseOverBucket = false;\n this.resetCardHighLight(event);\n });\n\n this._renderAnnotations();\n\n this.ctrl.events.emit(renderComplete, {\n chartWidth: this.chartWidth,\n });\n }\n\n highlightCard(event) {\n const color = d3.select(event.target).style('fill');\n const highlightColor = d3.color(color).darker(2);\n const strokeColor = d3.color(color).brighter(4);\n const current_card = d3.select(event.target);\n this.tooltip.originalFillColor = color;\n current_card\n .style('fill', highlightColor.toString())\n .style('stroke', strokeColor.toString())\n .style('stroke-width', 1);\n }\n\n resetCardHighLight(event) {\n d3.select(event.target)\n .style('fill', this.tooltip.originalFillColor)\n .style('stroke', this.tooltip.originalFillColor)\n .style('stroke-width', 0);\n }\n\n getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(this.ctrl.colorSchemes, { value: this.panel.color.colorScheme });\n // @ts-ignore\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n // @ts-ignore\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue === minValue) {\n maxValue = minValue + 1;\n }\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n setOpacityScale(maxValue) {\n if (this.panel.color.colorScale === 'linear') {\n this.opacityScale = d3\n .scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3\n .scalePow()\n .exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(b: Bucket) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n //let cx = this.xScale(d.x);\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\n\n if (cx - this.cardWidth / 2 < 0) {\n x = this.yAxisWidth + this.cardHSpacing / 2;\n } else {\n x = this.yAxisWidth + cx - this.cardWidth / 2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n getCardWidth(b: Bucket) {\n //return 20;\n let w;\n\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\n //let cx = this.xScale(d.x);\n\n if (cx < this.cardWidth / 2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = cx - this.cardHSpacing / 2 + this.cardWidth / 2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (this.chartWidth - cx < this.cardWidth / 2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = this.cardWidth / 2 + (this.chartWidth - cx - this.cardHSpacing / 2);\n } else {\n w = this.cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (this.cardHSpacing === 0) {\n w = w + 1;\n }\n\n return w;\n }\n\n // Top y for card.\n // yScale gives ???\n getCardY(b: Bucket) {\n return this.yScale(b.yLabel) + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n }\n\n getCardHeight(b: Bucket) {\n //return 20;\n let ys = this.yScale(b.yLabel);\n let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n let h = this.cardHeight;\n\n // Cut card height to prevent overlay\n if (y < this.chartTop) {\n h = ys - this.cardVSpacing / 2;\n } else if (ys > this.chartBottom) {\n h = this.chartBottom - y;\n } else if (y + this.cardHeight > this.chartBottom) {\n h = this.chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, this.chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (this.cardVSpacing === 0) {\n h = h + 1;\n }\n\n return h;\n }\n\n getCardColor(bucket: Bucket) {\n if (this.panel.color.mode === 'opacity') {\n return this.panel.color.cardColor;\n } else if (this.panel.color.mode === 'spectrum') {\n return this.colorScale(bucket.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex !== null && this.panel.seriesFilterIndex !== -1) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(bucket.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(bucket.values);\n }\n }\n }\n\n getCardOpacity(bucket: Bucket) {\n if (this.panel.nullPointMode === 'as empty' && bucket.value == null) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(bucket.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(b: Bucket) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n getEventOffset(event) {\n const elemOffset = this.$heatmap.offset();\n const x = Math.floor(event.clientX - elemOffset.left);\n const y = Math.floor(event.clientY - elemOffset.top);\n return { x, y };\n }\n\n onMouseDown(event) {\n const offset = this.getEventOffset(event);\n this.selection.active = true;\n this.selection.x1 = offset.x;\n\n this.mouseUpHandler = () => {\n this.onMouseUp();\n };\n\n $(document).one('mouseup', this.mouseUpHandler.bind(this));\n }\n\n onMouseUp() {\n $(document).unbind('mouseup', this.mouseUpHandler.bind(this));\n this.mouseUpHandler = null;\n this.selection.active = false;\n\n let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);\n if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = this.xScale.invert(\n Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n let timeTo = this.xScale.invert(\n Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n\n // TODO use toUtc method from moment wrapper in @grafana/data\n this.ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo),\n });\n }\n\n this.clearSelection();\n }\n\n onMouseLeave(e) {\n appEvents.emit(CoreEvents.graphHoverClear);\n this.clearCrosshair();\n this.annotationTooltip.destroy();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.heatmap) {\n return;\n }\n\n const offset = this.getEventOffset(event);\n if (this.selection.active) {\n // Clear crosshair and tooltip\n this.clearCrosshair();\n this.tooltip.destroy();\n this.annotationTooltip.destroy();\n\n this.selection.x2 = this.limitSelection(event.offsetX);\n this.drawSelection(this.selection.x1, this.selection.x2);\n } else {\n //const pos = this.getEventPos(event, offset);\n this.emitGraphHoverEvent(event);\n this.drawCrosshair(offset.x);\n this.tooltip.show(event);\n this.annotationTooltip.show(event);\n }\n }\n\n // TODO emit an event and move logic to panelCtrl\n onMouseClick(e: MouseEvent) {\n if (this.ctrl.panel.tooltip.freezeOnClick) {\n this.tooltip.showFrozen(e);\n this.tooltip.destroy();\n }\n }\n\n getEventPos(event, offset) {\n const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();\n const y = this.yScale.invert(offset.y - this.chartTop);\n const pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: null,\n offset,\n };\n\n return pos;\n }\n\n emitGraphHoverEvent(event) {\n let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize / 2).valueOf();\n let y = this.yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: 0,\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit(CoreEvents.graphHover, { pos: pos, panel: this.panel });\n }\n\n limitSelection(x2) {\n x2 = Math.max(x2, this.yAxisWidth);\n x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);\n return x2;\n }\n\n drawSelection(posX1, posX2) {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-selection').remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n this.heatmap\n .append('rect')\n .attr('class', 'status-heatmap-selection')\n .attr('x', selectionX)\n .attr('width', selectionWidth)\n .attr('y', this.chartTop)\n .attr('height', this.chartHeight);\n }\n }\n }\n\n clearSelection() {\n this.selection.x1 = -1;\n this.selection.x2 = -1;\n\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-selection').remove();\n }\n }\n\n drawCrosshair(position) {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-crosshair').remove();\n\n let posX = position;\n posX = Math.max(posX, this.yAxisWidth);\n posX = Math.min(posX, this.chartWidth + this.yAxisWidth);\n\n this.heatmap\n .append('g')\n .attr('class', 'status-heatmap-crosshair')\n .attr('transform', 'translate(' + posX + ',0)')\n .append('line')\n .attr('x1', 1)\n .attr('y1', this.chartTop)\n .attr('x2', 1)\n .attr('y2', this.chartBottom)\n .attr('stroke-width', 1);\n }\n }\n\n // map time to X\n drawSharedCrosshair(pos) {\n if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {\n const posX = this.xScale(pos.x) + this.yAxisWidth;\n this.drawCrosshair(posX);\n }\n }\n\n clearCrosshair() {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-crosshair').remove();\n }\n }\n\n render() {\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.bucketMatrix = this.ctrl.bucketMatrix;\n this.bucketMatrixPager = this.ctrl.bucketMatrixPager;\n\n if (!this.bucketMatrix || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n this.addStatusmapCanvas();\n if (this.bucketMatrix.noDatapoints) {\n return;\n }\n\n this.addStatusmap();\n this.scope.yAxisWidth = this.yAxisWidth;\n this.scope.xAxisHeight = this.xAxisHeight;\n this.scope.chartHeight = this.chartHeight;\n this.scope.chartWidth = this.chartWidth;\n this.scope.chartTop = this.chartTop;\n }\n\n _renderAnnotations() {\n if (!this.ctrl.annotations || this.ctrl.annotations.length === 0) {\n return;\n }\n\n if (!this.heatmap) {\n return;\n }\n\n let annoData = _.map(this.ctrl.annotations, (d, i) => ({\n // @ts-ignore\n x: Math.floor(this.yAxisWidth + this.xScale(d.time)),\n id: i,\n // @ts-ignore\n anno: d.source,\n }));\n\n //({\"ctrl_annotations\": this.ctrl.annotations, \"annoData\": annoData});\n\n let anno = this.heatmap\n .append('g')\n .attr('class', 'statusmap-annotations')\n .attr('transform', 'translate(0.5,0)')\n .selectAll('.statusmap-annotations')\n .data(annoData)\n .enter()\n .append('g');\n\n anno\n .append('line')\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr('x1', d => d.x)\n .attr('y1', this.chartTop)\n .attr('x2', d => d.x)\n .attr('y2', this.chartBottom)\n .style('stroke', d => d.anno.iconColor)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '3,3');\n\n anno\n .append('polygon')\n .attr('points', d =>\n [\n [d.x, this.chartBottom + 1],\n [d.x - 5, this.chartBottom + 6],\n [d.x + 5, this.chartBottom + 6],\n ].join(' ')\n )\n .style('stroke-width', 0)\n .style('fill', d => d.anno.iconColor);\n\n // Polygons didn't fire mouseevents\n anno\n .append('rect')\n .attr('x', d => d.x - 5)\n .attr('width', 10)\n .attr('y', this.chartBottom + 1)\n .attr('height', 5)\n .attr('class', 'statusmap-annotation-tick')\n .attr('annoId', d => d.id)\n .style('opacity', 0);\n\n let $ticks = this.$heatmap.find('.statusmap-annotation-tick');\n $ticks\n .on('mouseenter', event => {\n this.annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on('mouseleave', event => {\n this.annotationTooltip.mouseOverAnnotationTick = false;\n });\n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = range / ticks / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return '%H:%M:%S';\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return '%H:%M';\n }\n if (secPerTick <= 80000) {\n return '%m/%d %H:%M';\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return '%m/%d';\n }\n return '%Y-%m';\n }\n\n return '%H:%M';\n}\n","import { Emitter } from 'grafana/app/core/utils/emitter';\n\n// Old Grafana releases use strings as event ids and\n// new event ids in form of object {name: \"event-id\"} are not\n// supported properly: first defined listener will receive\n// all emitted events despite of the value in 'name' field.\n//\n// This method detects this behaviour and return true\n// only for new Grafana versions.\nexport function hasAppEventCompatibleEmitter(emitter: Emitter): boolean {\n // Grafana 7.4 has new event bus for Angular plugins. It is has a 'subscribe' method.\n let emitterProto = Object.getPrototypeOf(emitter);\n if (Object.prototype.hasOwnProperty.call(emitterProto, 'subscribe')) {\n return true;\n }\n\n let receiveEvents = 0;\n let eventId: any = { name: 'non-existed-event-id' };\n let eventId2: any = { name: 'non-existed-event-id-2' };\n emitter.on(eventId, function() {\n receiveEvents++;\n });\n emitter.emit(eventId);\n emitter.emit(eventId2);\n emitter.removeAllListeners(eventId);\n\n // New Grafana versions should receive one event.\n return receiveEvents === 1;\n}\n","import _ from 'lodash';\nimport { Bucket } from './statusmap_data';\nimport { StatusHeatmapCtrl } from './module';\n\ninterface Tooltip {\n tooltip: string;\n color: string;\n}\n\ndeclare class DiscreteColorThreshold {\n color: string;\n value: number;\n tooltip: string;\n}\n\n// Extra Series methods to handle discrete color mode\nexport class ColorModeDiscrete {\n scope: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values: any[]): Tooltip[] {\n let thresholds = this.panel.color.thresholds;\n let tooltips: Tooltip[] = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values[j],\n color: thresholds[i].color,\n });\n }\n }\n }\n return tooltips;\n }\n\n convertValueToTooltips(values) {\n let thresholds = this.panel.color.thresholds;\n let tooltips = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n //for (let j = 0; j < values.length; j++) {\n if (values === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values,\n color: thresholds[i].color,\n });\n //}\n }\n }\n return tooltips;\n }\n\n getNotMatchedValues(values: any[]) {\n let notMatched: any[] = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values: any[]) {\n let notMatched: any[] = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color === '') {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n getBucketColorSingle(value) {\n //let thresholds = this.panel.color.thresholds;\n if (value == null) {\n // treat as null value\n return 'rgba(0,0,0,1)';\n //return this.getMatchedThreshold(null).color;\n }\n let threshold = this.getMatchedThreshold(value);\n\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n if (!values || values.length === 0) {\n // treat as null value\n return this.getMatchedThreshold(null).color;\n }\n\n if (values.length === 1) {\n let threshold = this.getMatchedThreshold(values[0]);\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n let isAllValuesNulls = true;\n for (let j = 0; j < values.length; j++) {\n if (values[j] != null) {\n isAllValuesNulls = false;\n }\n }\n if (isAllValuesNulls) {\n return this.getMatchedThreshold(null).color;\n }\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] === thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfoSingle() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n let threshold = this.getMatchedThreshold(bucket.value);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n }\n });\n });\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n for (let j = 0; j < bucket.values.length; j++) {\n let threshold = this.getMatchedThreshold(bucket.values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n break;\n }\n }\n });\n });\n }\n\n getMatchedThreshold(value) {\n if (value == null) {\n if (this.panel.nullPointMode === 'as empty') {\n // FIXME: make this explicit for user\n // Right now this color never used because null as empty handles in getCardOpacity method.\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n } else {\n value = 0;\n }\n }\n\n let thresholds = this.panel.color.thresholds;\n for (let k = 0; k < thresholds.length; k++) {\n if (value === thresholds[k].value) {\n return thresholds[k];\n }\n }\n return null;\n }\n\n getThreshold(index) {\n let thresholds = this.panel.color.thresholds;\n if (index < 0 || index >= thresholds.length == null) {\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n","// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\n\n// Utils\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { loadPluginCss } from 'grafana/app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'grafana/app/plugins/sdk';\nimport { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv';\nimport { CoreEvents, PanelEvents } from './libs/grafana/events/index';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './libs/polygrafill/index';\n\nimport { ColorModeDiscrete } from './color_mode_discrete';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' },\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/styles/dark.css',\n light: 'plugins/flant-statusmap-panel/styles/light.css',\n});\n\nexport var renderComplete: any = { name: 'statusmap-render-complete' };\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n\n graph: any;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: { [warningId: string]: { title: string; tip: string } } = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer = 15;\n\n panelDefaults: any = {\n // datasource name, null = default datasource\n datasource: null,\n // color mode\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [], // manual colors\n },\n // buckets settings\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null,\n },\n xAxis: {\n show: true,\n },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [], // see tooltip_editor.ts\n showExtraInfo: false,\n extraInfo: '',\n },\n legend: {\n show: true,\n },\n yLabel: {\n usingSplitLabel: false,\n delimiter: '',\n labelTemplate: '',\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15,\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if (!Polygrafill.hasAppEventCompatibleEmitter(this.events)) {\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn['intervalToMs'] === 'function') {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n chartWidth: -1,\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteExtraSeries = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n noColorDefined: {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n multipleValues: {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n },\n noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n },\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any): void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth(): number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\n const wndWidth = $(window).width();\n // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.\n const panelWidthFactor = this.panel.gridPos.w / 24;\n const panelWidth = Math.ceil(wndWidth * panelWidthFactor);\n // approximate width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([panelWidth - 200, panelWidth / 2]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n // TODO ts type has no argument for this method.\n //\n updateTimeRange(datasource?: any) {\n // @ts-ignore\n let ret = super.updateTimeRange(datasource);\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\n calculateInterval() {\n let chartWidth = this.getChartWidth();\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth - minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteExtraSeries.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n\n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n let interval = kbn.secondsToHms(intervalMs / 1000);\n\n this.intervalMs = intervalMs;\n this.interval = interval;\n\n // Get final buckets count after interval is adjusted\n // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\n }\n\n issueQueries(datasource: any) {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n // 5.x before 5.4 doesn't have datasourcePromises.\n // @ts-ignore\n if ('undefined' !== typeof this.annotationsSrv.datasourcePromises) {\n // @ts-ignore\n return this.annotationsSrv.datasourcePromises.then(r => {\n return this.issueQueriesWithInterval(datasource, this.interval);\n });\n } else {\n return this.issueQueriesWithInterval(datasource, this.interval);\n }\n }\n\n // Grafana 6.2 (and older) is using this.interval for queries,\n // but Grafana 6.3+ is calculating interval again in queryRunner,\n // so we need to save-restore this.panel.interval.\n issueQueriesWithInterval(datasource: any, interval: any) {\n var origInterval = this.panel.interval;\n this.panel.interval = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(\n dataList,\n this.range.from.valueOf(),\n this.range.to.valueOf(),\n this.intervalMs,\n true\n );\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\n this.annotationsPromise.then(\n (result: { alertState: any; annotations: any }) => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = [];\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex === -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n }\n }\n\n onCardColorChange(newColor) {\n this.panel.color.cardColor = newColor;\n this.render();\n }\n\n onDataError() {\n this.data = [];\n this.annotations = [];\n this.render();\n }\n\n postRefresh() {\n this.noColorDefined = false;\n }\n\n link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(\n data: any,\n from: number,\n to: number,\n intervalMs: number,\n mostRecentBucket: boolean\n ): BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length === 0) {\n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = ['1.0', '0.0', '-1.0'];\n bucketMatrix.buckets['1.0'] = [];\n bucketMatrix.buckets['0.0'] = [];\n bucketMatrix.buckets['-1.0'] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: { [target: string]: number[] } = {};\n let targetPartials: { [target: string]: string[] } = {};\n\n // Group indicies of elements in data by target (y label).\n\n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n // Init yLabel as the query target\n let yLabel = queryResult.target;\n\n // Check if there is some labelTemplate configured\n if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter !== '') {\n let pLabels = queryResult.target.split(this.panel.yLabel.delimiter);\n\n // Load all possible values as scoped vars and load them into targetPartials\n // to be used on different components as Bucket and BucketMatrix props\n let scopedVars = [];\n scopedVars[`__y_label`] = { value: yLabel };\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n if (this.panel.yLabel.labelTemplate !== '') {\n yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars);\n }\n\n targetPartials[yLabel] = pLabels;\n }\n\n //reset if it already exists\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: { [target: string]: { [timestamp: number]: number[] } } = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map(target => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX] - from);\n });\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length - 1; i >= 0; i--) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i - 1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i - 1] + 1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map(target => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to - from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo + from;\n topBucket.from = topBucket.relFrom + from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.pLabels = targetPartials[target];\n b.relTo = lastTs - idx * intervalMs;\n b.relFrom = lastTs - (idx + 1) * intervalMs;\n b.to = b.relTo + from;\n b.from = b.relFrom + from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n\n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n targetIndex[target].map(dataIndex => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map(bucket => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value =\n this.panel.seriesFilterIndex !== -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n });\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n bucketMatrix.pLabels = targetPartials;\n return bucketMatrix;\n }\n}\n\nexport { StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl };\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"lodash\"","webpack:///external \"d3\"","webpack:///external \"jquery\"","webpack:///external \"app/core/utils/kbn\"","webpack:///external \"app/core/core\"","webpack:///external \"app/plugins/sdk\"","webpack:///external \"app/core/core_module\"","webpack:///external \"moment\"","webpack:///external \"app/core/utils/ticks\"","webpack:///../node_modules/tslib/tslib.es6.js","webpack:///../node_modules/d3-scale-chromatic/src/colors.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/define.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/constant.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/rgb.js","webpack:///../node_modules/d3-scale-chromatic/src/ramp.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basisClosed.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/math.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack:///./util/d3/d3-scale-chromatic.ts","webpack:///./util/grafana/events/events.ts","webpack:///./util/grafana/events/panelEvents.ts","webpack:///./color_legend.ts","webpack:///./options_editor.ts","webpack:///./tooltip_editor.ts","webpack:///./panel_config_migration.ts","webpack:///./statusmap_data.ts","webpack:///./tooltip.ts","webpack:///./annotations.ts","webpack:///./rendering.ts","webpack:///./util/polygrafill/funcs.ts","webpack:///./color_mode_discrete.ts","webpack:///./module.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__10__","extendStatics","b","setPrototypeOf","__proto__","Array","__assign","assign","arguments","length","apply","this","__values","iterator","next","done","TypeError","specifier","colors","slice","constructor","factory","extend","parent","definition","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","NaN","g","a","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","Math","max","min","round","toString","h","Hsl","hslConvert","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","copy","channels","displayable","formatHsl","brighter","k","pow","darker","x","linear","gamma","y","nogamma","exponential","constant","color","start","end","rgbGamma","rgbSpline","spline","rgbBasis","values","floor","scheme","concat","map","ramp","radians","PI","degrees","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","sqrt","atan2","hue","cubehelixGamma","cubehelix","cosh","cos","sinh","sin","cubehelixLong","warm","cool","ts","abs","pi_1_3","pi_2_3","range","magma","inferno","plasma","GnYlRdScheme","GnYlRd","d3ScaleChromatic","interpolateGnYlRd","graphHover","graphHoverClear","fallbackToStringEvents","refresh","dataError","dataReceived","dataSnapshotLoad","editModeInitialized","drawLegendValues","elem","colorScale","rangeFrom","rangeTo","maxValue","minValue","legendWidth","legendElem","find","legend","childNodes","legendValueScale","domain","ticks","tickStepSize","ticksNum","current","isValueCloseTo","push","sortBy","uniq","buildLegendTicks","xAxis","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","append","attr","select","remove","clearLegend","empty","getColorScale","colorScheme","colorInterpolator","colorScaleInverted","invert","user","lightTheme","svgElem","baseVal","height","val","valueTo","step","directive","restrict","template","link","scope","attrs","ctrl","panel","render","outerWidth","colorSchemes","legendHeight","valuesRange","selectAll","data","enter","LEGEND_STEP_WIDTH","drawSimpleColorLegend","colorOptions","options","exponent","cardColor","style","drawSimpleOpacityLegend","events","on","show","bucketMatrix","noDatapoints","rangeStep","widthFactor","drawColorLegend","opacityScale","legendOpacityScale","getOpacityScale","drawOpacityLegend","discreteExtraSeries","thresholds","tooltips","tr","valuesNumber","graphWidthAttr","graphWidth","textWidth","text","each","thisWidth","getBBox","width","itemWidth","getDiscreteColor","thresholdValues","thresholdTooltips","tooltip","tickFormat","valueOf","v","undefined","drawDiscreteLegendValues","drawDiscreteColorLegend","$scope","editor","panelCtrl","unitFormats","getUnitFormats","setUnitFormat","subItem","unitFormat","onAddThreshold","defaultColor","onRemoveThreshold","index","splice","onRemoveThresholds","onAddThreeLights","onAddSolarized","optionsEditorCtrl","templateUrl","controller","emptyTooltipItem","urlText","urlTemplate","urlIcon","urlToLowerCase","valueDateFormat","onAddUrl","items","onRemoveUrl","onRemoveUrls","getFAIconClasses","getValueDateFormats","tooltipEditorCtrl","TooltipEditorCtrl","migratePanelConfig","has","statusmap","ConfigVersion","labelFormat","minBucketWidthToShowWeekends","showCrosshair","showWeekends","yAxis","cards","cardSpacing","cardVSpacing","cardHSpacing","freezeOnClick","usingUrl","hasRealItems","urls","url","base_url","label","showItems","item","icon_fa","forcelowercase","replace","valueVar","useExtraSeries","extraSeries","migrate_V0_V1","id","columns","multipleValues","noColorDefined","yLabel","pLabels","xid","from","to","relFrom","relTo","mostRecent","belong","put","isEmpty","buckets","targets","rangeMs","intervalMs","xBucketSize","yid","Bucket","hasData","target","defaultPageSize","pageSize","currentPage","BucketMatrix","enable","me","rowLabel","setEnable","setCurrent","num","setDefaultPageSize","setPageSize","pages","ceil","totalRows","pageStartRow","pageEndRow","last","hasNext","hasPrev","switchToNext","switchToPrev","dashboard","panelElem","mouseOverBucket","originalFillColor","onMouseOver","onMouseLeave","e","add","move","destroy","onMouseMove","removeFrozen","tooltipFrozen","showFrozen","pos","displayTooltip","moveRelative","panelRelY","frozen","cardEl","bucket","timestamp","tooltipClose","tooltipHtml","formatDate","statuses","statusTitle","seriesFilterIndex","convertValueToTooltips","convertValuesToTooltips","join","JSON","parse","stringify","scopedVars","retrieveTimeVar","dateFormat","templateSrv","truncate","showCustomContent","customContent","useMax","dataWarnings","title","badValues","getNotColoredValues","html","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","panelX","offset","panelY","panelWidth","panelHeight","tooltipLeft","tooltipTop","mouseOverAnnotationTick","tooltipBase","annoId","anno","annotations","annoTime","time","annoText","annoTags","tags","backColor","borderColor","chartWidth","chartHeight","chartTop","chartBottom","yAxisWidth","xAxisHeight","cardRound","cardWidth","cardHeight","xGridSize","yGridSize","dataRangeWidingFactor","$heatmap","annotationTooltip","yOffset","selection","active","x1","x2","padding","right","bottom","margin","onRender","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseClick","clearCrosshair","event","drawSharedCrosshair","renderingCompleted","setElementHeight","row","isString","usingPagination","css","getYAxisWidth","axisText","nodes","maxTextWidth","getXAxisHeight","axisLinePosition","parseFloat","addXAxis","xScale","timeRange","timeFormat","grafanaTimeFormatter","secPerTick","grafanaTimeFormat","getTimezone","tickPadding","heatmap","getYScale","getYAxisScale","addYAxis","bucketMatrixPager","yAxisSort","sort","localeCompare","ignorePunctuation","numeric","yAxisScale","yScale","tickSizeInner","wideYAxisRange","tickInterval","y_min","y_max","y_widing","decimals","scaledDecimals","valueFormats","addStatusmapCanvas","heatmap_elem","insert","addStatusmap","setOpacityScale","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","highlightCard","resetCardHighLight","_renderAnnotations","emit","renderComplete","highlightColor","strokeColor","current_card","cx","w","cutted_width","ys","getBucketColorSingle","getBucketColor","nullPointMode","getCardStrokeWidth","getEventOffset","elemOffset","clientX","clientY","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","getEventPos","y1","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","annoData","source","hasAppEventCompatibleEmitter","emitter","emitterProto","getPrototypeOf","receiveEvents","eventId","removeAllListeners","j","getNotMatchedValues","notMatched","getMatchedThreshold","threshold","getThreshold","isAllValuesNulls","updateCardsValuesHasColorInfoSingle","updateCardsValuesHasColorInfo","roundIntervalCeil","interval","colorModes","opacityScales","dark","light","$injector","annotationsSrv","pageSizeViewer","panelDefaults","datasource","cardMinWidth","minWidth","maxWidth","showExtraInfo","extraInfo","usingSplitLabel","delimiter","labelTemplate","highlightCards","interval_to_ms","intervalToMs","defaultsDeep","BucketMatrixPager","pager","graph","ColorModeDiscrete","tip","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onCardColorChange","__","changeDefaultPaginationSize","onChangePageSize","onPrevPage","onNextPage","getChartWidth","wndWidth","$","panelWidthFactor","gridPos","updateTimeRange","ret","calculateInterval","minCardWidth","minSpacing","maxCardsCount","lowLimitMs","intervalOverride","secondsToHms","issueQueries","annotationsPromise","getAnnotations","datasourcePromises","then","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","result","loading","addEditorTab","newColor","rendering","timeRangeForUrl","mostRecentBucket","targetIndex","targetPartials","queryResult","split","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","datapoints","datapoint","idx","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","bucketFrom","Number","MAX_VALUE","MIN_SAFE_INTEGER","dataIndex","dp","bucketsLen"],"mappings":"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","file":"module.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import * as d3 from 'd3';\nimport * as d3ScaleChromaticOrig from 'd3-scale-chromatic';\n\n// Add GnYlRd color schema to d3-scale-chromatic\n\nlet GnYlRdScheme = new Array(3)\n .concat(\n '91cf60ffffbffc8d59',\n '1a9641a6d96afdae61d7191c',\n '1a9641a6d96affffbffdae61d7191c',\n '1a985091cf60d9ef8bfee08bfc8d59d73027',\n '1a985091cf60d9ef8bffffbffee08bfc8d59d73027',\n '1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027',\n '1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027',\n '0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026',\n '0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026'\n )\n .map(function(specifier) {\n var n = (specifier.length / 6) | 0,\n colors = new Array(n),\n i = 0;\n while (i < n) {\n colors[i] = '#' + specifier.slice(i * 6, ++i * 6);\n }\n return colors;\n });\n\nlet GnYlRd = d3.interpolateRgbBasis(GnYlRdScheme[GnYlRdScheme.length - 1]);\n\nlet d3ScaleChromatic = {\n ...d3ScaleChromaticOrig,\n interpolateGnYlRd: GnYlRd,\n};\n\nexport { d3ScaleChromatic };\n","import { AppEvent } from './appEvents';\n\nexport interface GraphHoverPayload {\n pos: any;\n panel: {\n id: number;\n };\n}\n\nexport var graphHover: AppEvent | string = { name: 'graph-hover' };\nexport var graphHoverClear: AppEvent | string = { name: 'graph-hover-clear' };\n\nexport function fallbackToStringEvents() {\n graphHover = 'graph-hover';\n graphHoverClear = 'graph-hover-clear';\n}\n","import { AppEvent } from './appEvents';\n\nexport interface DataQueryError {\n data?: {\n message?: string;\n error?: string;\n };\n message?: string;\n status?: string;\n statusText?: string;\n refId?: string;\n cancelled?: boolean;\n}\n\nexport var refresh: AppEvent | string = { name: 'refresh' };\nexport var render: AppEvent | string = { name: 'render' };\nexport var dataError: AppEvent | string = { name: 'data-error' };\nexport var dataReceived: AppEvent | string = { name: 'data-received' };\nexport var dataSnapshotLoad: AppEvent | string = { name: 'data-snapshot-load' };\nexport var editModeInitialized: AppEvent | string = { name: 'init-edit-mode' };\n\nexport function fallbackToStringEvents() {\n refresh = 'refresh';\n render = 'render';\n dataError = 'data-error';\n dataReceived = 'data-received';\n dataSnapshotLoad = 'data-snapshot-load';\n editModeInitialized = 'init-edit-mode';\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './util/d3/d3-scale-chromatic';\nimport { contextSrv } from 'grafana/app/core/core';\nimport { tickStep } from 'grafana/app/core/utils/ticks';\nimport coreModule from 'grafana/app/core/core_module';\n\nimport { StatusHeatmapCtrl } from './module';\nimport { PanelEvents } from './util/grafana/events/index';\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Bigger color legend for opacity and spectrum modes editor.\n */\ncoreModule.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope: any, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n },\n };\n});\n\n/**\n * Graph legend with values.\n */\ncoreModule.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl: StatusHeatmapCtrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return;\n }\n if (ctrl.bucketMatrix) {\n let rangeFrom = ctrl.bucketMatrix.minValue;\n let rangeTo = ctrl.bucketMatrix.maxValue;\n let maxValue = panel.color.max != null ? panel.color.max : rangeTo;\n let minValue = panel.color.min != null ? panel.color.min : rangeFrom;\n\n if (ctrl.bucketMatrix.noDatapoints) {\n if (panel.color.max != null) {\n rangeTo = maxValue = 100;\n } else {\n rangeTo = 100;\n }\n if (panel.color.min != null) {\n rangeFrom = minValue = 0;\n } else {\n rangeFrom = 0;\n }\n }\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteExtraSeries);\n }\n }\n }\n },\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom: number, rangeTo: number, maxValue: number, minValue: number) {\n let legendElem = $(elem).find('svg');\n let legend: any = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr('height');\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => (d - rangeFrom) * widthFactor + 10)\n .attr('y', 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr('height');\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => d * widthFactor + 10)\n .attr('y', 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', options.cardColor)\n .style('opacity', d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteExtraSeries) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n const $heatmap = $(elem)\n .parent()\n .parent()\n .parent()\n .find('.statusmap-panel');\n const graphWidthAttr = $heatmap.find('svg').attr('width');\n let graphWidth = parseInt(graphWidthAttr, 10);\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth: number[] = [];\n legend\n .selectAll('.hidden-texts')\n .data(tooltips)\n .enter()\n .append('text')\n .attr('class', 'axis tick hidden-texts')\n .attr('font-family', 'sans-serif')\n .text(d => d)\n .each(function(d, i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n });\n legend.selectAll('.hidden-texts').remove();\n\n let legendWidth = Math.floor(_.min([graphWidth - 30, (_.max(textWidth)! + 3) * valuesNumber])!);\n legendElem.attr('width', legendWidth);\n\n let legendHeight = legendElem.attr('height');\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d * itemWidth)\n .attr('y', 0)\n .attr('width', itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => discreteExtraSeries.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\nfunction drawLegendValues(\n elem,\n colorScale,\n rangeFrom: number,\n rangeTo: number,\n maxValue: number,\n minValue: number,\n legendWidth: number\n) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3\n .scaleLinear()\n .domain([rangeFrom, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue);\n let xAxis = d3\n .axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(':first-child');\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n //let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n let legendValueScale = d3\n .scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3\n .axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat(t => {\n let i = Math.floor(t.valueOf());\n let v = thresholdTooltips[i];\n if (v !== undefined) {\n return '' + v;\n } else {\n v = thresholdValues[i];\n if (v !== undefined) {\n return '' + v;\n } else {\n return 'n/a';\n }\n }\n });\n\n let colorRect = legendElem.find(':first-child');\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep / 2);\n\n d3.select(legendElem.get(0))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr('height');\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d)\n .attr('y', 0)\n .attr('width', LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr('height');\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3\n .scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n .attr('x', d => d)\n .attr('y', 0)\n .attr('width', LEGEND_STEP_WIDTH + 1)\n .attr('height', legendHeight)\n .attr('stroke-width', 0)\n .attr('fill', options.cardColor)\n .style('opacity', d => legendOpacityScale(d));\n }\n}\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3\n .scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks: any = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i + rangeFrom;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(current);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n","import kbn from 'grafana/app/core/utils/kbn';\nimport { StatusHeatmapCtrl } from './module';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n unitFormats: any;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n\n this.unitFormats = kbn.getUnitFormats();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddThreshold() {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n }\n\n onRemoveThreshold(index: number) {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n }\n\n onRemoveThresholds() {\n this.panel.color.thresholds = [];\n this.render();\n }\n\n onAddThreeLights() {\n this.panel.color.thresholds.push({ color: 'red', value: 2, tooltip: 'error' });\n this.panel.color.thresholds.push({ color: 'yellow', value: 1, tooltip: 'warning' });\n this.panel.color.thresholds.push({ color: 'green', value: 0, tooltip: 'ok' });\n this.render();\n }\n\n /* https://ethanschoonover.com/solarized/ */\n onAddSolarized() {\n this.panel.color.thresholds.push({ color: '#b58900', value: 0, tooltip: 'yellow' });\n this.panel.color.thresholds.push({ color: '#cb4b16', value: 1, tooltip: 'orange' });\n this.panel.color.thresholds.push({ color: '#dc322f', value: 2, tooltip: 'red' });\n this.panel.color.thresholds.push({ color: '#d33682', value: 3, tooltip: 'magenta' });\n this.panel.color.thresholds.push({ color: '#6c71c4', value: 4, tooltip: 'violet' });\n this.panel.color.thresholds.push({ color: '#268bd2', value: 5, tooltip: 'blue' });\n this.panel.color.thresholds.push({ color: '#2aa198', value: 6, tooltip: 'cyan' });\n this.panel.color.thresholds.push({ color: '#859900', value: 7, tooltip: 'green' });\n this.render();\n }\n}\n\n/** @ngInject */\nexport function optionsEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/options_editor.html',\n controller: StatusHeatmapOptionsEditorCtrl,\n };\n}\n","import { StatusHeatmapCtrl } from './module';\n\nlet emptyTooltipItem = {\n urlText: '',\n urlTemplate: '',\n urlIcon: 'external-link',\n urlToLowerCase: true,\n valueDateFormat: '',\n};\n\nexport class TooltipEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddUrl() {\n this.panel.tooltip.items.push(Object.assign({}, emptyTooltipItem));\n this.render();\n }\n\n onRemoveUrl(index: number) {\n this.panel.tooltip.items.splice(index, 1);\n this.render();\n }\n\n onRemoveUrls() {\n this.panel.tooltip.items = [];\n this.render();\n }\n\n getFAIconClasses() {\n return ['external-link', 'plus', 'anchor', 'ban', 'globe', 'gear', 'cloud', 'download', 'cloud-download'];\n }\n\n getValueDateFormats() {\n return ['YYYY/MM/DD/HH_mm_ss', 'YYYYMMDDHHmmss', 'YYYY-MM-DD-HH-mm-ss'];\n }\n}\n\nexport function tooltipEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/tooltip_editor.html',\n controller: TooltipEditorCtrl,\n };\n}\n","import _ from 'lodash';\n\nfunction migrate_V0_V1(panel: any) {\n // Remove unused fields.\n if (_.has(panel, 'xAxis.labelFormat')) {\n delete panel.xAxis.labelFormat;\n }\n if (_.has(panel, 'xAxis.minBucketWidthToShowWeekends')) {\n delete panel.xAxis.minBucketWidthToShowWeekends;\n }\n if (_.has(panel, 'xAxis.showCrosshair')) {\n delete panel.xAxis.showCrosshair;\n }\n if (_.has(panel, 'xAxis.showWeekends')) {\n delete panel.xAxis.showWeekends;\n }\n if (_.has(panel, 'yAxis.showCrosshair')) {\n delete panel.yAxis.showCrosshair;\n }\n if (_.has(panel, 'data.unitFormat')) {\n delete panel.data;\n }\n\n // Migrate cardSpacing value. Seems rare (update from version 0.0.2).\n if (_.has(panel, 'cards.cardSpacing')) {\n if (!_.has(panel, 'cards.cardVSpacing')) {\n if (panel.cards.cardSpacing) {\n panel.cards.cardVSpacing = panel.cards.cardSpacing;\n panel.cards.cardHSpacing = panel.cards.cardSpacing;\n }\n }\n delete panel.cards.cardSpacing;\n }\n\n // Migrate initial config for urls in tooltip (pull/86).\n // 'usingUrl' was used to show tooltip with urls on click or not.\n if (_.has(panel, 'usingUrl')) {\n if (!_.has(panel, 'tooltip.freezeOnClick')) {\n panel.tooltip.freezeOnClick = panel.usingUrl;\n }\n delete panel.usingUrl;\n }\n\n // 'urls' array is now tooltip.items array. Also items are changed.\n if (_.has(panel, 'urls')) {\n if (!_.has(panel, 'tooltip.items')) {\n panel.tooltip.items = [];\n let hasRealItems = true;\n if (panel.urls.length === 0) {\n hasRealItems = false;\n }\n if (panel.urls.length === 1) {\n let url = panel.urls[0];\n if (url.base_url === '' && url.label === '') {\n hasRealItems = false;\n }\n }\n if (hasRealItems) {\n panel.tooltip.showItems = true;\n for (let url of panel.urls) {\n let item = {\n urlTemplate: _.toString(url.base_url),\n urlText: _.toString(url.label),\n urlIcon: _.toString(url.icon_fa),\n urlToLowerCase: url.forcelowercase,\n valueDateFormat: '',\n };\n // replace $vars with new ${__vars} if url template is not empty\n if (item.urlTemplate !== '') {\n // $time was a graph time with prepended &\n item.urlTemplate = _.replace(url.base_url, /\\$time/g, '&${__url_time_range}');\n // $series_label was a y axis label\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_label/, '${__y_label}');\n // $series_extra was a value from bucket. This value has format options and index.\n let valueVar = '__value';\n if (url.useExtraSeries === true) {\n // index?\n if (url.extraSeries.index > -1) {\n valueVar += '_' + url.extraSeries.index;\n }\n\n let format = _.toString(url.extraSeries.format);\n if (format === 'YYYY/MM/DD/HH_mm_ss') {\n valueVar += '_date';\n item.valueDateFormat = format;\n }\n }\n\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_extra/, `\\${${valueVar}}`);\n }\n panel.tooltip.items.push(item);\n }\n }\n }\n delete panel.urls;\n }\n\n // create statusmap metadata\n panel.statusmap = {\n ConfigVersion: 'v1',\n };\n}\n\nexport function migratePanelConfig(panel: any) {\n if (_.has(panel, 'statusmap')) {\n if (panel.statusmap.ConfigVersion === 'v1') {\n return;\n }\n } else {\n migrate_V0_V1(panel);\n }\n return;\n}\n","// A holder of a group of values\nclass Bucket {\n // uniq id\n id = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues = false;\n // a bucket has values that has no mapped color\n noColorDefined = false;\n // y label\n y = '';\n yLabel = '';\n pLabels: string[] = [];\n\n // This value can be used to calculate a x coordinate on a graph\n x = 0;\n xid = 0;\n // a time range of this bucket\n from = 0;\n to = 0;\n // to and from relative to real \"from\"\n relFrom = 0;\n relTo = 0;\n\n mostRecent = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue = 0;\n maxValue = 0;\n // A value if multiple values is not allowed\n value = 0;\n\n constructor() {}\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length === 0;\n }\n}\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: { [yLabel: string]: Bucket[] } = {};\n maxValue = 0;\n minValue = 0;\n multipleValues = false;\n noColorDefined = false;\n // a flag that indicate that buckets has stub values\n noDatapoints = false;\n\n // An array of row labels\n targets: string[] = [];\n pLabels: { [target: string]: string[] } = {};\n rangeMs = 0;\n intervalMs = 0;\n\n xBucketSize = 0; // TODO remove: a transition from CardsData\n\n constructor() {}\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target: string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged: any = { name: 'statusmap-pager-changed' };\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize = -1;\n pageSize = -1;\n currentPage = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage + 1));\n }\n\n buckets(): { [yLabel: string]: Bucket[] } {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: { [yLabel: string]: Bucket[] } = {};\n let me = this;\n\n this.targets().map(function(rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n });\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return this.pageSize * this.currentPage + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage + 1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage + 1) * this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n}\n\nexport { Bucket, BucketMatrix, BucketMatrixPager };\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on('mouseover', this.onMouseOver.bind(this));\n elem.on('mouseleave', this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3\n .select('body')\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null;\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3\n .select(this.panelElem[0])\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip statusmap-tooltip-frozen');\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n // @ts-ignore\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let pLabels = bucket.pLabels;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n\n let statusTitle = 'status:';\n if (statuses.length > 1) {\n statusTitle = 'statuses:';\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(\n _.map(\n statuses,\n v => `
  • ${v.tooltip}
  • `\n ),\n ''\n )}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(\n _.map(values, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = { value: bucket.values[i] };\n }\n scopedVars['__value'] = { value: bucket.value };\n scopedVars['__y_label'] = { value: yLabel };\n scopedVars['__y_label_trim'] = { value: yLabel.trim() };\n // Grafana 7.0 compatible\n scopedVars['__url_time_range'] = { value: this.panelCtrl.retrieveTimeVar() };\n\n //New vars based on partialLabels:\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = '#';\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat === '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = { value: this.dashboard.formatDate(+bucket.values[i], dateFormat) };\n }\n scopedVars['__value_date'] = { value: this.dashboard.formatDate(+bucket.value, dateFormat) };\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars);\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? 'Empty URL' : _.truncate(item.link);\n }\n }\n\n if (this.panel.tooltip.showCustomContent) {\n let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars);\n tooltipHtml += `
${customContent}
`;\n }\n\n tooltipHtml += _.join(\n _.map(\n items,\n v => `\n
\n \n
\n
`\n ),\n '\\n'\n );\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(\n _.map(badValues, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on('click', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mousedown', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mouseup', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n });\n\n // Activate close button\n tooltip.select('a.tooltip-close').on('click', this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip.style('left', left + 'px').style('top', top + 'px');\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style('left', tooltipLeft + 'px')\n .style('top', tooltipTop + 'px')\n .style('width', tooltipWidth + 'px');\n }\n}\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 10;\n\nexport class AnnotationTooltip {\n scope: any;\n dashboard: any;\n panelCtrl: any;\n panel: any;\n mouseOverAnnotationTick: boolean;\n\n tooltipBase: any;\n tooltip: any;\n\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.mouseOverAnnotationTick = false;\n\n elem.on('mouseover', this.onMouseOver.bind(this));\n elem.on('mouseleave', this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3\n .select('body')\n .append('div')\n .attr(\n 'class',\n 'statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open'\n )\n .style('position', 'absolute');\n this.tooltip = this.tooltipBase\n .append('div')\n .attr('class', 'drop-content')\n .append('div')\n .append('annotation-tooltip')\n .append('div')\n .attr('class', 'graph-annotation');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n\n if (this.tooltipBase) {\n this.tooltipBase.remove();\n }\n\n this.tooltipBase = null;\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n // shared tooltip mode\n //if (pos.panelRelY) {\n // return;\n //}\n\n let annoId = d3.select(pos.target).attr('annoId');\n if (!annoId) {\n this.destroy();\n return;\n }\n\n let anno = this.panelCtrl.annotations[annoId];\n if (!anno) {\n this.destroy();\n return;\n }\n\n let annoTitle = '';\n\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);\n let annoText = anno.text;\n let annoTags: any = [];\n if (anno.tags) {\n annoTags = _.map(anno.tags, t => ({ text: t, backColor: 'rgb(63, 43, 91)', borderColor: 'rgb(101, 81, 129)' }));\n }\n\n let tooltipHtml = `
\n ${annoTitle}\n ${annoTime}
\n
\n
${annoText}
\n ${_.join(\n _.map(\n annoTags,\n t =>\n `${t.text}`\n ),\n ''\n )}\n
\n
`;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) {\n return;\n }\n\n let elem = $(this.tooltipBase.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX - tooltipWidth / 2;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth / 2 + 10 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltipBase.style('left', left + 'px').style('top', top + 'px');\n }\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\n\n// TODO moment is used instead of @grafana/data to run in 6.2 and earlier.\n/* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */\nimport moment from 'moment';\n\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { appEvents, contextSrv } from 'grafana/app/core/core';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './util/d3/d3-scale-chromatic';\nimport { StatusmapTooltip } from './tooltip';\nimport { AnnotationTooltip } from './annotations';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport { StatusHeatmapCtrl, renderComplete } from './module';\nimport { CoreEvents, PanelEvents } from './util/grafana/events/index';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n // @ts-ignore\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {\n return new StatusmapRenderer(scope, elem, attrs, ctrl);\n}\n\n// @ts-ignore\nclass Statusmap {\n $svg: any;\n svg: any;\n bucketMatrix: BucketMatrix;\n\n timeRange: { from: number; to: number } = { from: 0, to: 0 };\n\n constructor() {}\n}\n\nexport class StatusmapRenderer {\n width = 0;\n height = 0;\n yScale: any;\n xScale: any;\n chartWidth = 0;\n chartHeight = 0;\n chartTop = 0;\n chartBottom = 0;\n yAxisWidth = 0;\n xAxisHeight = 0;\n cardVSpacing = 0;\n cardHSpacing = 0;\n cardRound = 0;\n cardWidth = 0;\n cardHeight = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize = 0;\n yGridSize = 0;\n\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n panel: any;\n $heatmap: any;\n tooltip: StatusmapTooltip;\n annotationTooltip: AnnotationTooltip;\n heatmap: any;\n timeRange: any;\n\n yOffset: number;\n selection: any;\n padding: any;\n margin: any;\n dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;\n\n constructor(private scope: any, private elem: any, attrs: any, private ctrl: StatusHeatmapCtrl) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.statusmap-panel');\n this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);\n this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);\n\n this.yOffset = 0;\n\n this.selection = {\n active: false,\n x1: -1,\n x2: -1,\n };\n\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\n this.margin = { left: 25, right: 15, top: 10, bottom: 20 };\n\n this.ctrl.events.on(PanelEvents.render, this.onRender.bind(this));\n\n // @ts-ignore\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip this.empty = true;\n\n appEvents.on(CoreEvents.graphHover, this.onGraphHover.bind(this), this.scope);\n\n appEvents.on(CoreEvents.graphHoverClear, this.onGraphHoverClear.bind(this), this.scope);\n\n // Register selection listeners\n this.$heatmap.on('mousedown', this.onMouseDown.bind(this));\n this.$heatmap.on('mousemove', this.onMouseMove.bind(this));\n this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));\n this.$heatmap.on('click', this.onMouseClick.bind(this));\n }\n\n onGraphHoverClear() {\n this.clearCrosshair();\n }\n\n onGraphHover(event: { pos: any }) {\n this.drawSharedCrosshair(event.pos);\n }\n\n onRender() {\n this.render();\n this.ctrl.renderingCompleted();\n }\n\n setElementHeight(): boolean {\n try {\n var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n if (this.panel.usingPagination) {\n // TODO get height of pagination controls.\n // reserve height for legend and for a row of pagination controls.\n height -= this.panel.legend.show ? 70 : 40; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n } else {\n // reserve height for legend\n height -= this.panel.legend.show ? 32 : 4; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n }\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) {\n // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any): number {\n const axisText = elem.selectAll('.axis-y text').nodes();\n const maxTextWidth = _.max(\n _.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n })\n );\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any): number {\n let axisLine = elem.select('.axis-x line');\n if (!axisLine.empty()) {\n let axisLinePosition = parseFloat(elem.select('.axis-x line').attr('y2'));\n let canvasWidth = parseFloat(elem.attr('height'));\n return canvasWidth - axisLinePosition;\n } else {\n // Default height\n return 30;\n }\n }\n\n addXAxis() {\n // Scale timestamps to cards centers\n //this.scope.xScale = this.xScale = d3.scaleTime()\n // .domain([this.timeRange.from, this.timeRange.to])\n // .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n // Buckets without the most recent\n this.scope.xScale = this.xScale = d3\n .scaleTime()\n .domain([this.timeRange.from, this.timeRange.to])\n .range([this.xGridSize / 2, this.chartWidth - this.xGridSize / 2]);\n\n let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);\n let timeFormat;\n let dashboardTimeZone = this.ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3\n .axisBottom(this.xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(this.chartHeight);\n\n let posY = this.chartTop; // this.margin.top !\n let posX = this.yAxisWidth;\n\n this.heatmap\n .append('g')\n .attr('class', 'axis axis-x')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n this.heatmap\n .select('.axis-x')\n .select('.domain')\n .remove();\n }\n\n // divide chart height by ticks for cards drawing\n getYScale(ticks: any[]) {\n let range: any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i + 1));\n }\n return d3\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks: any[]) {\n let range: any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(this.yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + this.yOffset);\n }\n return d3\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = this.bucketMatrixPager.targets();\n\n // TODO move sorting into bucketMatrixPager.\n if (this.panel.yAxisSort === 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true }));\n } else if (this.panel.yAxisSort === 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true }));\n }\n\n let yAxisScale = this.getYAxisScale(ticks);\n this.scope.yScale = this.yScale = this.getYScale(ticks);\n\n let yAxis = d3\n // @ts-ignore\n .axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - this.width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n this.heatmap\n .append('g')\n .attr('class', 'axis axis-y')\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = this.margin.top;\n let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.heatmap.select('.axis-y').attr('transform', 'translate(' + posX + ',' + posY + ')');\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n this.heatmap\n .select('.axis-y')\n .select('.domain')\n .remove();\n this.heatmap\n .select('.axis-y')\n .selectAll('.tick line')\n .remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min: number, max: number, tickInterval: number) {\n let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * this.dataRangeWidingFactor;\n y_min = min - min * (this.dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return { y_min, y_max };\n }\n\n tickValueFormatter(decimals, scaledDecimals = null) {\n let format = this.panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n addStatusmapCanvas() {\n let heatmap_elem = this.$heatmap[0];\n\n this.width = Math.floor(this.$heatmap.width()) - this.padding.right;\n this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;\n\n if (this.heatmap) {\n this.heatmap.remove();\n }\n\n // Insert svg as a first child into heatmap_elem\n // as the frozen tooltip moving logiс assumes that tooltip is the last child.\n this.heatmap = d3\n .select(heatmap_elem)\n .insert('svg', ':first-child')\n .attr('width', this.width)\n .attr('height', this.height);\n\n this.chartHeight = this.height - this.margin.top - this.margin.bottom;\n this.chartTop = this.margin.top;\n this.chartBottom = this.chartTop + this.chartHeight;\n\n this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;\n this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;\n this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n this.yGridSize = this.chartHeight;\n if (this.bucketMatrixPager.targets().length > 0) {\n this.yGridSize = Math.floor(this.chartHeight / this.bucketMatrixPager.targets().length);\n }\n this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;\n this.yOffset = this.cardHeight / 2;\n\n this.addYAxis();\n\n this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.chartWidth = this.width - this.yAxisWidth - this.margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n this.xGridSize = this.chartWidth / (this.bucketMatrix.xBucketSize + 1);\n this.cardWidth = this.xGridSize - this.cardHSpacing;\n\n this.addXAxis();\n this.xAxisHeight = this.getXAxisHeight(this.heatmap);\n\n if (!this.panel.yAxis.show) {\n this.heatmap\n .select('.axis-y')\n .selectAll('line')\n .style('opacity', 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap\n .select('.axis-x')\n .selectAll('line')\n .style('opacity', 0);\n }\n }\n\n addStatusmap(): void {\n let maxValue = this.panel.color.max != null ? this.panel.color.max : this.bucketMatrix.maxValue;\n let minValue = this.panel.color.min != null ? this.panel.color.min : this.bucketMatrix.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n // Draw cards from buckets.\n this.heatmap\n .selectAll('.statusmap-cards-row')\n .data(this.bucketMatrixPager.targets())\n .enter()\n .selectAll('.statustmap-card')\n .data((target: string) => this.bucketMatrix.buckets[target])\n .enter()\n .append('rect')\n .attr('cardId', (b: Bucket) => b.id)\n .attr('xid', (b: Bucket) => b.xid)\n .attr('yid', (b: Bucket) => b.yLabel)\n .attr('x', this.getCardX.bind(this))\n .attr('width', this.getCardWidth.bind(this))\n .attr('y', this.getCardY.bind(this))\n .attr('height', this.getCardHeight.bind(this))\n .attr('rx', this.cardRound)\n .attr('ry', this.cardRound)\n .attr('class', (b: Bucket) => (b.isEmpty() ? 'empty-card' : 'bordered statusmap-card'))\n .style('fill', this.getCardColor.bind(this))\n .style('stroke', this.getCardColor.bind(this))\n .style('stroke-width', 0)\n //.style('stroke-width', getCardStrokeWidth)\n //.style('stroke-dasharray', '3,3')\n .style('opacity', this.getCardOpacity.bind(this));\n\n // Set mouse events on cards.\n let $cards = this.$heatmap.find('.statusmap-card + .bordered');\n $cards\n .on('mouseenter', event => {\n this.tooltip.mouseOverBucket = true;\n this.highlightCard(event);\n })\n .on('mouseleave', event => {\n this.tooltip.mouseOverBucket = false;\n this.resetCardHighLight(event);\n });\n\n this._renderAnnotations();\n\n this.ctrl.events.emit(renderComplete, {\n chartWidth: this.chartWidth,\n });\n }\n\n highlightCard(event) {\n const color = d3.select(event.target).style('fill');\n const highlightColor = d3.color(color).darker(2);\n const strokeColor = d3.color(color).brighter(4);\n const current_card = d3.select(event.target);\n this.tooltip.originalFillColor = color;\n current_card\n .style('fill', highlightColor.toString())\n .style('stroke', strokeColor.toString())\n .style('stroke-width', 1);\n }\n\n resetCardHighLight(event) {\n d3.select(event.target)\n .style('fill', this.tooltip.originalFillColor)\n .style('stroke', this.tooltip.originalFillColor)\n .style('stroke-width', 0);\n }\n\n getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(this.ctrl.colorSchemes, { value: this.panel.color.colorScheme });\n // @ts-ignore\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n // @ts-ignore\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue === minValue) {\n maxValue = minValue + 1;\n }\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n setOpacityScale(maxValue) {\n if (this.panel.color.colorScale === 'linear') {\n this.opacityScale = d3\n .scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3\n .scalePow()\n .exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(b: Bucket) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n //let cx = this.xScale(d.x);\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\n\n if (cx - this.cardWidth / 2 < 0) {\n x = this.yAxisWidth + this.cardHSpacing / 2;\n } else {\n x = this.yAxisWidth + cx - this.cardWidth / 2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n getCardWidth(b: Bucket) {\n //return 20;\n let w;\n\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\n //let cx = this.xScale(d.x);\n\n if (cx < this.cardWidth / 2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = cx - this.cardHSpacing / 2 + this.cardWidth / 2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (this.chartWidth - cx < this.cardWidth / 2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = this.cardWidth / 2 + (this.chartWidth - cx - this.cardHSpacing / 2);\n } else {\n w = this.cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (this.cardHSpacing === 0) {\n w = w + 1;\n }\n\n return w;\n }\n\n // Top y for card.\n // yScale gives ???\n getCardY(b: Bucket) {\n return this.yScale(b.yLabel) + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n }\n\n getCardHeight(b: Bucket) {\n //return 20;\n let ys = this.yScale(b.yLabel);\n let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n let h = this.cardHeight;\n\n // Cut card height to prevent overlay\n if (y < this.chartTop) {\n h = ys - this.cardVSpacing / 2;\n } else if (ys > this.chartBottom) {\n h = this.chartBottom - y;\n } else if (y + this.cardHeight > this.chartBottom) {\n h = this.chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, this.chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (this.cardVSpacing === 0) {\n h = h + 1;\n }\n\n return h;\n }\n\n getCardColor(bucket: Bucket) {\n if (this.panel.color.mode === 'opacity') {\n return this.panel.color.cardColor;\n } else if (this.panel.color.mode === 'spectrum') {\n return this.colorScale(bucket.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex !== null && this.panel.seriesFilterIndex !== -1) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(bucket.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(bucket.values);\n }\n }\n }\n\n getCardOpacity(bucket: Bucket) {\n if (this.panel.nullPointMode === 'as empty' && bucket.value == null) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(bucket.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(b: Bucket) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n getEventOffset(event) {\n const elemOffset = this.$heatmap.offset();\n const x = Math.floor(event.clientX - elemOffset.left);\n const y = Math.floor(event.clientY - elemOffset.top);\n return { x, y };\n }\n\n onMouseDown(event) {\n const offset = this.getEventOffset(event);\n this.selection.active = true;\n this.selection.x1 = offset.x;\n\n this.mouseUpHandler = () => {\n this.onMouseUp();\n };\n\n $(document).one('mouseup', this.mouseUpHandler.bind(this));\n }\n\n onMouseUp() {\n $(document).unbind('mouseup', this.mouseUpHandler.bind(this));\n this.mouseUpHandler = null;\n this.selection.active = false;\n\n let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);\n if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = this.xScale.invert(\n Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n let timeTo = this.xScale.invert(\n Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n\n // TODO use toUtc method from moment wrapper in @grafana/data\n this.ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo),\n });\n }\n\n this.clearSelection();\n }\n\n onMouseLeave(e) {\n appEvents.emit(CoreEvents.graphHoverClear);\n this.clearCrosshair();\n this.annotationTooltip.destroy();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.heatmap) {\n return;\n }\n\n const offset = this.getEventOffset(event);\n if (this.selection.active) {\n // Clear crosshair and tooltip\n this.clearCrosshair();\n this.tooltip.destroy();\n this.annotationTooltip.destroy();\n\n this.selection.x2 = this.limitSelection(event.offsetX);\n this.drawSelection(this.selection.x1, this.selection.x2);\n } else {\n //const pos = this.getEventPos(event, offset);\n this.emitGraphHoverEvent(event);\n this.drawCrosshair(offset.x);\n this.tooltip.show(event);\n this.annotationTooltip.show(event);\n }\n }\n\n // TODO emit an event and move logic to panelCtrl\n onMouseClick(e: MouseEvent) {\n if (this.ctrl.panel.tooltip.freezeOnClick) {\n this.tooltip.showFrozen(e);\n this.tooltip.destroy();\n }\n }\n\n getEventPos(event, offset) {\n const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();\n const y = this.yScale.invert(offset.y - this.chartTop);\n const pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: null,\n offset,\n };\n\n return pos;\n }\n\n emitGraphHoverEvent(event) {\n let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize / 2).valueOf();\n let y = this.yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: 0,\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit(CoreEvents.graphHover, { pos: pos, panel: this.panel });\n }\n\n limitSelection(x2) {\n x2 = Math.max(x2, this.yAxisWidth);\n x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);\n return x2;\n }\n\n drawSelection(posX1, posX2) {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-selection').remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n this.heatmap\n .append('rect')\n .attr('class', 'status-heatmap-selection')\n .attr('x', selectionX)\n .attr('width', selectionWidth)\n .attr('y', this.chartTop)\n .attr('height', this.chartHeight);\n }\n }\n }\n\n clearSelection() {\n this.selection.x1 = -1;\n this.selection.x2 = -1;\n\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-selection').remove();\n }\n }\n\n drawCrosshair(position) {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-crosshair').remove();\n\n let posX = position;\n posX = Math.max(posX, this.yAxisWidth);\n posX = Math.min(posX, this.chartWidth + this.yAxisWidth);\n\n this.heatmap\n .append('g')\n .attr('class', 'status-heatmap-crosshair')\n .attr('transform', 'translate(' + posX + ',0)')\n .append('line')\n .attr('x1', 1)\n .attr('y1', this.chartTop)\n .attr('x2', 1)\n .attr('y2', this.chartBottom)\n .attr('stroke-width', 1);\n }\n }\n\n // map time to X\n drawSharedCrosshair(pos) {\n if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {\n const posX = this.xScale(pos.x) + this.yAxisWidth;\n this.drawCrosshair(posX);\n }\n }\n\n clearCrosshair() {\n if (this.heatmap) {\n this.heatmap.selectAll('.status-heatmap-crosshair').remove();\n }\n }\n\n render() {\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.bucketMatrix = this.ctrl.bucketMatrix;\n this.bucketMatrixPager = this.ctrl.bucketMatrixPager;\n\n if (!this.bucketMatrix || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n this.addStatusmapCanvas();\n if (this.bucketMatrix.noDatapoints) {\n return;\n }\n\n this.addStatusmap();\n this.scope.yAxisWidth = this.yAxisWidth;\n this.scope.xAxisHeight = this.xAxisHeight;\n this.scope.chartHeight = this.chartHeight;\n this.scope.chartWidth = this.chartWidth;\n this.scope.chartTop = this.chartTop;\n }\n\n _renderAnnotations() {\n if (!this.ctrl.annotations || this.ctrl.annotations.length === 0) {\n return;\n }\n\n if (!this.heatmap) {\n return;\n }\n\n let annoData = _.map(this.ctrl.annotations, (d, i) => ({\n // @ts-ignore\n x: Math.floor(this.yAxisWidth + this.xScale(d.time)),\n id: i,\n // @ts-ignore\n anno: d.source,\n }));\n\n //({\"ctrl_annotations\": this.ctrl.annotations, \"annoData\": annoData});\n\n let anno = this.heatmap\n .append('g')\n .attr('class', 'statusmap-annotations')\n .attr('transform', 'translate(0.5,0)')\n .selectAll('.statusmap-annotations')\n .data(annoData)\n .enter()\n .append('g');\n\n anno\n .append('line')\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr('x1', d => d.x)\n .attr('y1', this.chartTop)\n .attr('x2', d => d.x)\n .attr('y2', this.chartBottom)\n .style('stroke', d => d.anno.iconColor)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '3,3');\n\n anno\n .append('polygon')\n .attr('points', d =>\n [\n [d.x, this.chartBottom + 1],\n [d.x - 5, this.chartBottom + 6],\n [d.x + 5, this.chartBottom + 6],\n ].join(' ')\n )\n .style('stroke-width', 0)\n .style('fill', d => d.anno.iconColor);\n\n // Polygons didn't fire mouseevents\n anno\n .append('rect')\n .attr('x', d => d.x - 5)\n .attr('width', 10)\n .attr('y', this.chartBottom + 1)\n .attr('height', 5)\n .attr('class', 'statusmap-annotation-tick')\n .attr('annoId', d => d.id)\n .style('opacity', 0);\n\n let $ticks = this.$heatmap.find('.statusmap-annotation-tick');\n $ticks\n .on('mouseenter', event => {\n this.annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on('mouseleave', event => {\n this.annotationTooltip.mouseOverAnnotationTick = false;\n });\n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = range / ticks / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return '%H:%M:%S';\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return '%H:%M';\n }\n if (secPerTick <= 80000) {\n return '%m/%d %H:%M';\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return '%m/%d';\n }\n return '%Y-%m';\n }\n\n return '%H:%M';\n}\n","import { Emitter } from 'grafana/app/core/utils/emitter';\n\n// Old Grafana releases use strings as event ids and\n// new event ids in form of object {name: \"event-id\"} are not\n// supported properly: first defined listener will receive\n// all emitted events despite of the value in 'name' field.\n//\n// This method detects this behaviour and return true\n// only for new Grafana versions.\nexport function hasAppEventCompatibleEmitter(emitter: Emitter): boolean {\n // Grafana 7.4 has new event bus for Angular plugins. It is has a 'subscribe' method.\n let emitterProto = Object.getPrototypeOf(emitter);\n if (Object.prototype.hasOwnProperty.call(emitterProto, 'subscribe')) {\n return true;\n }\n\n let receiveEvents = 0;\n let eventId: any = { name: 'non-existed-event-id' };\n let eventId2: any = { name: 'non-existed-event-id-2' };\n emitter.on(eventId, function() {\n receiveEvents++;\n });\n emitter.emit(eventId);\n emitter.emit(eventId2);\n emitter.removeAllListeners(eventId);\n\n // New Grafana versions should receive one event.\n return receiveEvents === 1;\n}\n","import _ from 'lodash';\nimport { Bucket } from './statusmap_data';\nimport { StatusHeatmapCtrl } from './module';\n\ninterface Tooltip {\n tooltip: string;\n color: string;\n}\n\ndeclare class DiscreteColorThreshold {\n color: string;\n value: number;\n tooltip: string;\n}\n\n// Extra Series methods to handle discrete color mode\nexport class ColorModeDiscrete {\n scope: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values: any[]): Tooltip[] {\n let thresholds = this.panel.color.thresholds;\n let tooltips: Tooltip[] = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values[j],\n color: thresholds[i].color,\n });\n }\n }\n }\n return tooltips;\n }\n\n convertValueToTooltips(values) {\n let thresholds = this.panel.color.thresholds;\n let tooltips = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n //for (let j = 0; j < values.length; j++) {\n if (values === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values,\n color: thresholds[i].color,\n });\n //}\n }\n }\n return tooltips;\n }\n\n getNotMatchedValues(values: any[]) {\n let notMatched: any[] = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values: any[]) {\n let notMatched: any[] = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color === '') {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n getBucketColorSingle(value) {\n //let thresholds = this.panel.color.thresholds;\n if (value == null) {\n // treat as null value\n return 'rgba(0,0,0,1)';\n //return this.getMatchedThreshold(null).color;\n }\n let threshold = this.getMatchedThreshold(value);\n\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n if (!values || values.length === 0) {\n // treat as null value\n return this.getMatchedThreshold(null).color;\n }\n\n if (values.length === 1) {\n let threshold = this.getMatchedThreshold(values[0]);\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n let isAllValuesNulls = true;\n for (let j = 0; j < values.length; j++) {\n if (values[j] != null) {\n isAllValuesNulls = false;\n }\n }\n if (isAllValuesNulls) {\n return this.getMatchedThreshold(null).color;\n }\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] === thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfoSingle() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n let threshold = this.getMatchedThreshold(bucket.value);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n }\n });\n });\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n for (let j = 0; j < bucket.values.length; j++) {\n let threshold = this.getMatchedThreshold(bucket.values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n break;\n }\n }\n });\n });\n }\n\n getMatchedThreshold(value) {\n if (value == null) {\n if (this.panel.nullPointMode === 'as empty') {\n // FIXME: make this explicit for user\n // Right now this color never used because null as empty handles in getCardOpacity method.\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n } else {\n value = 0;\n }\n }\n\n let thresholds = this.panel.color.thresholds;\n for (let k = 0; k < thresholds.length; k++) {\n if (value === thresholds[k].value) {\n return thresholds[k];\n }\n }\n return null;\n }\n\n getThreshold(index) {\n let thresholds = this.panel.color.thresholds;\n if (index < 0 || index >= thresholds.length == null) {\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n","// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\n\n// Utils\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { loadPluginCss } from 'grafana/app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'grafana/app/plugins/sdk';\nimport { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv';\nimport { CoreEvents, PanelEvents } from './util/grafana/events/index';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './util/polygrafill/index';\n\nimport { ColorModeDiscrete } from './color_mode_discrete';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' },\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/styles/dark.css',\n light: 'plugins/flant-statusmap-panel/styles/light.css',\n});\n\nexport var renderComplete: any = { name: 'statusmap-render-complete' };\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n\n graph: any;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: { [warningId: string]: { title: string; tip: string } } = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer = 15;\n\n panelDefaults: any = {\n // datasource name, null = default datasource\n datasource: null,\n // color mode\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [], // manual colors\n },\n // buckets settings\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null,\n },\n xAxis: {\n show: true,\n },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [], // see tooltip_editor.ts\n showExtraInfo: false,\n extraInfo: '',\n },\n legend: {\n show: true,\n },\n yLabel: {\n usingSplitLabel: false,\n delimiter: '',\n labelTemplate: '',\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15,\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if (!Polygrafill.hasAppEventCompatibleEmitter(this.events)) {\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn['intervalToMs'] === 'function') {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n chartWidth: -1,\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteExtraSeries = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n noColorDefined: {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n multipleValues: {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n },\n noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n },\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any): void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth(): number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\n const wndWidth = $(window).width();\n // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.\n const panelWidthFactor = this.panel.gridPos.w / 24;\n const panelWidth = Math.ceil(wndWidth * panelWidthFactor);\n // approximate width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([panelWidth - 200, panelWidth / 2]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n // TODO ts type has no argument for this method.\n //\n updateTimeRange(datasource?: any) {\n // @ts-ignore\n let ret = super.updateTimeRange(datasource);\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\n calculateInterval() {\n let chartWidth = this.getChartWidth();\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth - minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteExtraSeries.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n\n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n let interval = kbn.secondsToHms(intervalMs / 1000);\n\n this.intervalMs = intervalMs;\n this.interval = interval;\n\n // Get final buckets count after interval is adjusted\n // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\n }\n\n issueQueries(datasource: any) {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n // 5.x before 5.4 doesn't have datasourcePromises.\n // @ts-ignore\n if ('undefined' !== typeof this.annotationsSrv.datasourcePromises) {\n // @ts-ignore\n return this.annotationsSrv.datasourcePromises.then(r => {\n return this.issueQueriesWithInterval(datasource, this.interval);\n });\n } else {\n return this.issueQueriesWithInterval(datasource, this.interval);\n }\n }\n\n // Grafana 6.2 (and older) is using this.interval for queries,\n // but Grafana 6.3+ is calculating interval again in queryRunner,\n // so we need to save-restore this.panel.interval.\n issueQueriesWithInterval(datasource: any, interval: any) {\n var origInterval = this.panel.interval;\n this.panel.interval = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(\n dataList,\n this.range.from.valueOf(),\n this.range.to.valueOf(),\n this.intervalMs,\n true\n );\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\n this.annotationsPromise.then(\n (result: { alertState: any; annotations: any }) => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = [];\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex === -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n }\n }\n\n onCardColorChange(newColor) {\n this.panel.color.cardColor = newColor;\n this.render();\n }\n\n onDataError() {\n this.data = [];\n this.annotations = [];\n this.render();\n }\n\n postRefresh() {\n this.noColorDefined = false;\n }\n\n link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(\n data: any,\n from: number,\n to: number,\n intervalMs: number,\n mostRecentBucket: boolean\n ): BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length === 0) {\n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = ['1.0', '0.0', '-1.0'];\n bucketMatrix.buckets['1.0'] = [];\n bucketMatrix.buckets['0.0'] = [];\n bucketMatrix.buckets['-1.0'] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: { [target: string]: number[] } = {};\n let targetPartials: { [target: string]: string[] } = {};\n\n // Group indicies of elements in data by target (y label).\n\n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n // Init yLabel as the query target\n let yLabel = queryResult.target;\n\n // Check if there is some labelTemplate configured\n if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter !== '') {\n let pLabels = queryResult.target.split(this.panel.yLabel.delimiter);\n\n // Load all possible values as scoped vars and load them into targetPartials\n // to be used on different components as Bucket and BucketMatrix props\n let scopedVars = [];\n scopedVars[`__y_label`] = { value: yLabel };\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n if (this.panel.yLabel.labelTemplate !== '') {\n yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars);\n }\n\n targetPartials[yLabel] = pLabels;\n }\n\n //reset if it already exists\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: { [target: string]: { [timestamp: number]: number[] } } = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map(target => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX] - from);\n });\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length - 1; i >= 0; i--) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i - 1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i - 1] + 1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map(target => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to - from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo + from;\n topBucket.from = topBucket.relFrom + from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.pLabels = targetPartials[target];\n b.relTo = lastTs - idx * intervalMs;\n b.relFrom = lastTs - (idx + 1) * intervalMs;\n b.to = b.relTo + from;\n b.from = b.relFrom + from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n\n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n targetIndex[target].map(dataIndex => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map(bucket => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value =\n this.panel.seriesFilterIndex !== -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n });\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n bucketMatrix.pLabels = targetPartials;\n return bucketMatrix;\n }\n}\n\nexport { StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl };\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/plugin.json b/dist/plugin.json index ea76fa3..f321bb9 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -16,7 +16,8 @@ }, "links": [ {"name": "Github", "url": "https://github.com/flant/grafana-statusmap"}, - {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"} + {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"}, + {"name": "Developer", "url": "https://flant.com"} ], "screenshots": [ {"name": "Panel with light theme", "path": "img/flant-statusmap-panel.png"}, @@ -24,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.3.4", - "updated": "2020-09-12" + "version": "0.4.0-pre", + "updated": "2021-02-15" }, "dependencies": { diff --git a/docs/img/__repo-social-preview.png b/docs/img/__repo-social-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bcbdd43ff76d910bf3b39d31728353116c22f7 GIT binary patch literal 35325 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 diff --git a/src/img/color-preset-02.png b/src/img/color-preset-02.png deleted file mode 100644 index 16bb9fbb87ce3a7d3e2371bd392c5cfbcdea09e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28464 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 P?*M5D1@Q_|gMj}9$c47Q diff --git a/src/img/min-width-spacing-rounding-01.png b/src/img/min-width-spacing-rounding-01.png deleted file mode 100644 index b5b68a297190aaa8e80244b086194905e9db26ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29803 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ⅅc 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 diff --git a/src/img/multiple-values-error.png b/src/img/multiple-values-error.png deleted file mode 100644 index 113773bb5a29476c2e873bb5a0d8cd183216ee1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22434 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 qU^X1NNgD=2na!HC@Ns+(hV(u0){HR zgCf!)v;fk3=+#g|n3Mb7S~Kg--1pwhnyjqsb573w&)(Ll>XORYEu7#^9lyFIv3jUye7exG@@Nv>3##p{dE0``LiP7p5x2XuRmZ?=8|>{q(E z)3iTMw6W7J)5i$X45JX7X3joJp&9N}$O*vQy6Zt3z3^Mej3U*U@ib#RMd$v&{+6`v0%1bJ||z83o6)!s_p@a`s=Gmk4v=I46 zN#*dMIn#vLOJ=4XiNaz-uZGig&h(QsVtb{&;e>-R17SxS26iyA$G7k4UrJ65l!X3l zJqkO-6C&nud$Xg4nL=V|h64=+a`8~Pa_mRX%pPk8TR}NK1=k zV!dK0Vvv`Ycm4X5ioVI=uVgpFz(7@f1B2sDt;!n2^1y0+a*MJupByXn<+YjFRw-V= z!TdSoFb9EZNE@5`l!CW44myAObRy<+W~M87DFSJqYigQgVfis=VIWT-Fp$xt+~FB> zO#7VMT8yhFjOKOBDsP@5f8o?#QK}}8i=g;o* z9jV{min*;*YwGIEOiaASYkqQa9@QW1RO@ARG5fs>x;E)lvi{u@t zedkI_AAEPL)+>TQf@39nzJCwHIE=nGtJqLRq52wwX3*ZXn1$Bpr3h#+9*=+Z@=KzW zp!?wtf8kKm#Kb$yK>pbI3zFU~@9#;>9svvWZaHy(OW%z8a%ZJnU&O%j<0z3lcY^)^ zfC7*t7>orkcjo4Xu(6?7d0O7L&sDn#e%8;vC_3;k@s7vPEiQb?tvh#aUw_{B?d?0) zm7(msyi&)BV|{%{l9WwTo{3w3B0F0~*45jRlBQMCx&k>*3a9xrHP3*u@%X3pKC!0b z74|N==!D3CxhGBm8JkQFnpy8|Y_ zk07+fn=Nf8*^O0PCvR^HfcW^7ZEOVbCGRmcH4w103L_)q&dzjtx&_GD+4+`~)WuW3 zrKIrjN1aqq7+Lz`=SQ_z62W(URk5gVordnIV`ugTT|GTL&CITpJB-bn5_^03K^eOH zBZb+erLU$M%HwW6NzKTpw9=d==D-w57m$P!`4mkRrKy65&OLO>-D{6<8}5*+xX5_% zr?+41o48VlhfendK7X z)x%yGb@O@i+an5^LP5)G4-}XaH#Nn?@(8dAbrpGedChq0JQwtpmcz`-%EHRZkW;!Y zK0C*XNGvKN7}GMQcu33}U8I1YRz}s@5U3j)a-hi1IlDA2^JVuXZOyJhN5{O~jn-*b zsD>N9BmWND0r&m|xJ}~qv-8L4>DYA4QW|@D@^jpJ^5#gIygZFhYeO6!f`m(oix-!k zy4dL=A|Kn25vvylJ~7<47^y!H`x^Z>`W-uH?Q2{=x4gSMQ;4hRFg>>74L`Pj-1`|L z?Aw-5=IvJ)>1W9$_+sl6mpM7wOrSoG+7sfsCtCDdHo1cOz+3e2A&1vcTzUJO zL(UaXeYc=ZPFdR!=t8IW8EA#kc1U`xF!D|0fD3yviD#qScdI0;h)U@b$kb~bZiuaA zk&QPTFA%n~u4b4yTl(gqoWpC~j9*$CHo>6uSC%j|aTxAxw(&*irq~;>n5C<;?~KpV zw(r25RWDNlM@H*M0%O8Uap2^bU|eSMEboTt*tWZ6^@>71->^_&NCvVf0oXy#! zH&5;+_mCV=G96-M8yUN6)I(o6s5JNp3g&-#VMstntE=e)?{YJVFa|?I|&35tb|swem18RoVqY<-^I08SF!ck*1k)ZE=fKK!(tbwf3PW~ zrHYl6?I6&UuBs~eD-lFRGcq!NDz?47jlDHh`s-Im zU|>^0ous3!Es!Ht*2&b>Ra>=*EmnhAUB3T@;W+@LqK3J}MVIu=%r^I&h$}xG<>lmR zzB=*%LA$_{h2eMZ7y^m1u&@B@*{FajZKd(d#6trPvv~2M!Uge3%dptuhgw`5XBOP| zu)`mtq0x4MU1oW~w%}>?b=YxWaj~As%8wA(V`F1~f313tZA0xYa%!r~=%^{c>pZ-x z+9{Bk>1k=#l^imeB{EXy#EAk1hT6z@!P94X0LW8U0nnn>EBfQd!4Fuhwe^*U+S*=+ zt1m&4l9FdxSSp>A6B0a6{n;o}YqWiyp%)&JR#xl`42Vi;-QC@(NcWk*egYv86B>Fp zIXU@LuM+t*+Y{q+-90@5Ak?-r3sTtkdw7hwfkq71@ zBDenxRh*8;FJg~4xF*VqF4i=i_xZ8d-;Wjv)fgl zxwZ(S{1?^Ltd3W+^|Q~t`)q7tLKIZtzYrt~FZ{y&{zC<#5%avVQpT`=S}`-HtH;U< zMfbO~*iJV(d3shY9qz9Nd|p)o98Mpv)0N4b0tWwzkDhBC9?s5Pq3%wYyP_@+LrcoJ za0+fIm={F}INv%4JG(rnhxUBD`4yPQR!2+Z+BWH(p*}=khyz`hx=KGYSU`fO@Z9<% zrdmrNy7iA3jT< z5z(v5i;IQ^2IVZkWGf0IjuqB(_3<(H?m7NiJ&Zc|RJ7H)ZgsHl(cHX_-W_AzM^h>L z&q0wb-|p3T?LyNYNqabd9j|Szs;W9T@T6xt=f1bmlX{O{Pq#NJYG-+QnJqFX$jN;# zDeQ82SxHGk;%+eJ!${>W0}#jtx?^tfXg9vB_Je|(;YbMe=&kMoh?;a$BMk-V&i zI9UY+c?E^CTA$2mZf@?}C&e{0jh#r_!)P&9)^Z!yB0D3~W{G#KZoJUZ(iwgMYvjlo zJ-z7Fk#b6;8*No@p!Zm20Q* z_redQ6(4axu%epd=S%zmfg^1s&RJ3UnGhQV+Hd0?kX|K}ZFR^x+-onC>cnLfTK> zOo4+)8hWO>%Wkk+0jHBz!LVs6`^BUShPnoAF?Z}9zw{?T$R4Pi1_h_HfVR6IVXokb zDL;VJn@Ykg+3bcRyZfPmwL}uOQq8is?DqXd#8OI_Y*!_Rx9j%lR^d$PL7%RXtVU{lP>gN4GLxwml@cV#@`h?pL_^hYUXI-GC};voi&ZB zKaAWm6xK_4*&upp+xn$ASc~~a(^bqR&4z%FibPUdl;nOd7?5C}lDRvVkE0H1=0-v~ zgK&jbry1ncD&RqXr>l;?(N$N*MreRcTZR^*K!LGN#`82O%4nMVe$E?VWWaGz(9TRh z>4rhZH{s_rQ3v5`&2FBAIrFFdTl)O3tLUHd*xFXfAH)OA`1}%I;dq&VK-K;MsQ3IA zR_J3rLsuL*3W30S?Pfwqet>p}jT`r#kFjj7GlUiWjnUWCI z>iJkJZbnHvYR@t9Eh^`_%)L+7sDk_4iUQQkQ`3*8N2cP3+U;{B{VxrW}@#$0VSEU^Ug3VIDI-t=mU%qT-hihtH z&&|o1+1&f~O)oiVMZsZms8DZrZH%};Qn)P~m9>(`$f+1j>Dev1R>0Kl};c)_4g z*Cf_ewL0Wq`_+5x)}csUUS1LCU!R?)8h|%v;m&=#3DHpOQ))=1U7X76o$ydaKXUb2vvlr+kxRwp7}Cl=p664B8f9TOJ^D7iok z2Xg>G@@%IAPTJXtLUA%aln-y-q|Y?N$EtTV|Kvw?6O$0k%8LC!!Gx*KX7`UDh~7_r zHu-BL(nA%1P*5n;tI}Mgt;4vccs$S?d;@Nn@3{8*Zucff;gI3A^D!}_rTV6wo1`>aTn41o=8PbhIAvqpOA}+;nXvGho~edX^s$uuUeRl({3@WH%{_j& zE%mpm^mliEo!Ja}psf6sKw{JRV<~NpD-wK~*z;ebry2LX+f)6np68%2z^V)ncV zhXxGe<9zjd(;w>U@+&7!q{f+84XeZFfWAG$B~By~MPu74DtLKe z2yK;rpyFXTWvhKg5T5e8T(38k(j6T9j(|>85EP8Ztc?l-uD7M7Z7*|ja3Du3h~K{X z?5sSKk}3x7LPO2dY}eeU-(P>re8v&#L-EISrF32hL1Hiju1R_tqirZr)}sHM@r!J1 z7k~d<8<1whGfiP0$4B6VgaqZl#{+{h(lW=!YDq~eM@Qa9dB$*+ot-i&6)Gln>^Uy= z-)S2l>f3Dl|H$+`j?|;EWQB~&GEHDGSj>#42U=2AwnWTP1J*XsK{7EFKDIyH+nfO~ z;?t)iAPQvjhY#HE-VuIQIN51x=2UtVU@(;`vy<1xYrSxfgtm5e(AOuxKn@FKDMl$; zTA@;sJLSG|DC_PH>^)=wsWb7R3J$#$Q6@o8-^|1q?g-OWev3=0sa`F8_bw6mdRDxC z{Vf69E?01weS3u|b{xGOR>n0og_7^`+F2>IGa8j*V!gU1kFKz54gwUgOnF+;;GbKm zZzgWhHjw|{HepjVGM1JU>CUsw&8Y*(Qsv1tX6#ef|Lxu=O=a>&DJdu<=8xYm7l`Ey z`Z4gQ95sH#Uv`u;aq{mXs5=h_3BzpPxUz|9_O!5n7TSDQhV0?`q-$Ctt}rwC6hWE@ z*1=uf6ZUT2RoBw7uF7ow&WaMxqk0~d%M^d;g)oH=U8s1CLJU)%?7rB=_BM=K2UHVu za56%dj$A`&N)RrPyL)LC53S$PbeNqI8YuaQ>hoIM)yHL-w`(-7}@AIF?SZv zQ(#9`P2SW?81YNnjFxc{XUOu8)sL0T=)Ap5yIDB2<*|FtRR*+2y5p^VJ zu+ZK?KlbqEL$Q96Ab(am!I@gP|MZ{l$O`KXFNeQg4>N11oQ;)L?a6+oVKP;3pME4u z_E0xKywu+rO2DgdGbB}Kn2pN-`7^jS9&!Gc4uV8PujcyQOoU4n&R!QI`0J0xhZ;BLVi2oRugo67IK zH}lOme|&3dtzL9dP4&HX@7ZUcy$_KpO469R0{Fs4g$I8#0;$!egYqAqVJ{{l}*TqWPTsykY^dKkNy1C|bs_U0@QQx|h{2Z)uU>j^@)FaS^i zvJ#>io|#8k9{Tw6w@*2X=El$3M9X$e zZcE`MEPP`iWRAc@oTTbxQjF_LTt#wUsb+;pum3n>-|vi@;rABL^rJnd>}3Q)dgD-J0ramV($qF-Q&*!P{i2Jn(-#*P_IBV=DJUpqztUp(3YP#M|MCI{7k0V%@~NR9ck?<< zgG&42jUeFK_5zT3r3T#J-^kC`tn+#P0XVKU`%_0!OtC560)azjN0#G;GIDM6OG_4x zj?E_hY91c*dnMe!FU~aIr$@(wLnHwYhrRO~dwUjoC5fWK!YQja*w|OI722O9#sob4 zm6$snR!4IDF5?TfP^XlIKQSOtU*Wih5cvelNm8Fi;+0(cc6E1;pHJ)hb%=Pw<_imb z$apI6e%EKQvi>ykyKvLgtg<0#)xTNw2rsX&ZE_4q8Q)_{`qb%zJu^Sw`SjRywYE%+ z8`*WUo12x@8!Pexc6xewb@gyM_!L9D@h((7j#@70hY;fGum0?~goJkItwVq+Wn|y= zcCIRepS*Xk#BGo^r~htXV7IT&$Fb{1>Rlik&}1`vc5smX<%@}}t-Og(IQG+fHMKU= z!Moz(V!+eF!d+H&|9glLo_*}a;k@1Y-{US8g(eP-(Ku`)IFWrW*|QwQJ+n~bB!K;X@lcowA6 zczT!C)Z9Ej^Y=(fN_u#_D;pjzuQd&Ub0Q)lD$^jP@Y~;?{#00qQd`R#aXq$mDke^! zBS?~#mZqt$9&oG=>yJu_j*bS{f!yi+H>6G0(_}0xEZz5KOu!3r!KHzL+h5-M0Rvkk!d_~IhK6f%bVWUpGWjOk>kkyDw0AKsL`5eHr?pE6ajBkc zBHh1kFUY`PkWuPlOBkA~HlV=yg%U_YcAlnSp}#Ul#_JFzF_xX3y|Y7bzB`8et+S&e zJ)Lwsr`z@7fV-^W;bNZmEk8fpuM}1T67J!#+1aF_H%=}tf^G*GIpZGg?ig5D<)xn9 zkG=|acKWuq%LCDel~wkD6BpOH$df{=`%zd;O-f`W<9-Rv)XSRpwiSsmF{&d`MwJZ8 zTtavic|E;lS&;>q_%GE$jd*ciD)39ku%ifjxFoX!@foRZ#zc*frqmM=LHWB$F3om*M1s<)As2-v;S>Fd8a|KJF8Uh=$Hby(hV(= zZeV07x04}Y=Ow&aS8jFM_#~DG_2O`3i`A@1p4xYTob6A(f$at&6v^?v^`!1V(#`C`Aea`pyEg!HZ5r1Qeh@7l+ z1o!j|F16v7;!NJvgv@(r7-%;7Ehldd#v;2W9m~kcEOgn+KXr!>H#9bquw#06VW7Te zw$RhdXlklxe~{FL3fSPFHaRYz?Z+I|VX@TfInOscF5`M_UO&^0?RGnNHhu|!C>C%t zG^ji>V$^~jTnBXsP?bJPp_f^D<<-hx9x(l)*s8_k{zy+UmJ$vKHzmfw@8ji}a*{+u z$`g|~>AtMU`e0&{oSnXTc!CWiDKpvF+9)WDMd+*_ty@}~H~P-n01Ky&?Oc}Q&SX2H zqqm-SC`U(A;7Bq^$;674qPpE6iQyH#0XQ7r8t~5fDipT2iJIQB^lEH#R5f z66~4#sdOR4LG;toywLFpiU;tW^%}p;YT8Je2Qgvv2HG%#k2UDDG@2G9Y6|?ijBaT^ z_1Jc4ElHW*G#??s@Wb>NaSB0i^!>7oChYGYdgE2aQU%0a{>kh85ij`SB-HldaP^9h z{AUXq-rlIug0+^d{NYkG+uiM*bPhjFX^pxfQIy1B%>DRE54FiyTU*;w>iM2#J-O89 zU#Fg-H#fkaQmXZ(xfn+?*mT~Bm+x9d##*8A0%d%O;rqgt3T^PoGou?FQxX%qotgO= z93|A%RdA#fk7YL6tlnl;R(@Rec(X#^i}PB-b!rI>k%pW?$4<%JB1|pPvbYEt8L4?> z$*3i{ER95}p!PkpL(0eiFV(j-K z&)aL^*9<`5U@UrPho2LHir*uM(@zb zSkj0&kgLH!PA+BVbrSNc)|C67fz6!V)jYK2fLHt;5T?{A)6>(M8Y282;BmJaaRf+i zF%anFnI8{B2X=QYfa~$S95~=ti&$Qq95{UBK7BUF_3gfPWjT2=M0iId%C}jpb`CMZ zkm6cVs)QlKYlss$5qjuV!j~7X=n(?NSc!OemC@0%xB|Xs>G85<#a{k7LpSQGd+N3= z6$@>Ldzklc#KTAT`k?a1)WjU*F8|lGH2w?AwR=G{~-EDtUUQ>(yB(G{#7& zVA6SK9X-sLICcf?5EfwV)PVOF=N?7IKYxbS~% zFW`f%rKPd8=6e+!V*C~7w$|30tsZH9oiw7K4|#DT0#*HHb;ELU!#Rm=>5sn*)s)=l zLhDt5TpMGA!0?pjuAuKnWb6MxHTDrGe zS19$IoQZPe1(WQUZ}(+OQbK2z*z(0#a<<*!ML($EWQ>7Pz399-v(JUm8Wv9TO8e<7FDV(R|I>|(yM@%B zRE{hy*x9LSS!CIMWh;bBO`T0Dr@pqa*IEA+et9zN92@rMtc#c;D=pi?(o$I=lLxX3 z{l%ee%9_RR*R!(H(=+^*ox#)ON8)*a1jWNfTvgWU3<;Naqq5BR9}#SX%?%9=9Zo|B z2fC)FT}@5$p}PK0nhy(vAtKNSvAl)THG!yPkRti_M5VlNu`;)dnwx8SFnUVqHI60W zO3#}=f=I_ked6MR@KhS@Y;4RuMH43RE~G=8>!gdJ-T8YlVOVxNhmG3vIU)f!XFG>y ztlVnw7`>yT3N+L`jV>fODtXE40g~hSSd7ffqegyi4^)nc=t3g8DvhSUH0Pp_y&SP1 zt{&Sp`De&vT)hr9gl&aTAq$CsJh5?X+S?eMUh>zldzd;0Mznnplvg7H`k>L#?yQR9 zfATU6t56#D$Po5Y`JENo6peR)#;nIjLAXgHnb^YzFa@DjiF)gw#CCndWB&$-{|xlx zc!NPBRDGqW=`fK%PYj)A|2Ekl==l=)*1K@n5;Bc`Wp&*mgH^g*4!2oAF3Lg2@~nCD9*GlmPnX^O#vGDP*bW?7J^XDq=s>@X;uuU3TwvaaLH+&wTmhYE*OYit6# zEd`bPLKaj0Oz?SdOKu?BKs7-6o5lkL;ex0ps>!I7-$7sh*9+{ggp6|&di}c~(kqQj zz@Ixd>45u_??KBrChU{dWH?KM&Z=aH!JS6O@PLp|TWhGf)xw+Zz;}R*vLCU}%~{jY z)7*3c_OI-B7>;jZVd=Kr1H)Kpq!zZ8MyWX-XU#_DoL&>D99na8aH676PU5BeJ(2c| z^z_T$i;7xsPUPV)2D^?oZt{;Cj7-g!7nW{s@4&n)f#oMf=FF4?zu!NUxh%$8J+44blPp!~0`bt! zFl@3-L%MLYRLUx6VB_WC$Zr1--ySYKZ;pd+NhK&MaD<4>#+IkTP+Fs@DEm2fe06j>++UI&MVB@1EB@+}HBzgm(2)lwO^n$v|c+TC?NMu9?rx z^$)YUeCgOExelmmUP-fZNpy0GkPdNI;@GZ!RBNG^>UhqBcy(O&?YN@*<>g@P19ifX z_nqlbenSK7sQHQ8d2?H*ewSSMKE%e`?)OEJe2QWwpI2{K^y1>8fwmxcIg|gqr>FR2 z<;EFOj|1T19{)_`I7~5$8B67`J=>nB=~~iOS3f_fs8LR3XQVbUx3C}t8k(ArQDTK$ zwyiv`r_k`|>=)~*%F56HG4YaYA)n*jF}?5KP3!CGfEZ!Ja*UNyWKJj z_>z*6(o)%)4_P9V1w)^f>|a{dpG5R>AOh4JTtWKP-{62h9BiEpMJ{<#)3xVN{rqb1DZXl;G^2X@df z+4_vg^X?YhD$fwzayeXD#mc^25PLuCO>tOjOOh(MxE%Zv3}RWw4U4VqVQJ}fyStzN z!OZ@`!XcodrFD5anA358Hd3OT1B1a9>dY%NULUoXn3>I#sh4zLZ=O>I+~;+5Ih?F@ z_Q3`Q2GY~hPr5~}kK322X=vtao(Aj8H>6`<)HXJ*HXc5kJwQT25_y1iC(tW{b(HVJ z1su@gLTm9o80qE9mmbF}XQ!vmuC5(^cRaODCMKKUmvBF+A|v0Dkm#tYPL_AKwRtOQ z&1eP0UkZsb6T$%*=i0)JvUz!3{*U0I-}es+sH>}KkeH%HD2$p+8tIU}XLj$&5-{>T zn~b?yw|7i=ox~SroV_Lt60^`7Byw@_@c5Vm4-`!G*WS+itU67jaU=ZK7mt4JPwJXF zvL%NK2^Qeg^qL)No0_n&ut=+qutn;g?j`SSu{f`>81q{%-pZtB# zcNK$zf`0x~a_oL^*I&V;UX97lUTZ(;+S=T#`|us!!{aJ0Zivfb)XBpGysf>pb(sY9 zOD&^z_o~|3+K`Zk-LZ^ngQz6AB4$E)JL@qM*^x=k8f$4|aax)im#U_xE@bQi4W`{_ zUDToX7qU3{m0L5e!Lm+;0|dTI(NljIC9F1Tzb|ZXJx{im8W_kqUQkki!7i1QI_{|W zhkB>$P3sgJT@~4u35wJf7bY59`{jg$2F6+z)VrT{4~~CYK)mmKP(ZHb@ZrN((?RLh z)>eCad)!E~jUFTbhn#$SZ?E0c`8ts?4_tV|Hdkxu6ud|YO-;?5fXDu710#4KW=pQ9 zuDF;GV8>9Ggu@EAH#3v)wE(Mds(2aL#f1Rjx7k_EJQZ-$yyaW)$P_jmfPp*D$lQEq zwLS9q__(Qwr}Nf8fey0w^Q!Cq?1`Umq4R9mo4TzNXZV6bQ@E;d`r-@%;ha+IO{sx; z*3r?^CF2vY7)OEHuVX5NLYqq$wEc!xm;06<=_WM!WMIBqk+YH0adtyS^9CsY85h3mo0#|$f}M@@3;`jeHyj%T5L!CA&JwBex_`8I{YLuSWIjrH0UR?YLM zC(d@yqFW$b$1^8`Ac3lR-^t^-B2QsCrt@`T;OFI!jo!VV5@8CM=YP)VicR0>&J5w9 zw=$cIEyZXnEqvAy>{6W>+Txz&rYkO{Hs%7L`;)8EUYx`jL~bQ+^fSdNN5kouWc?xnPDDAcO$`EiEm4(1)?~S&5!Ya0yIq!PVFsH~MpNakD3~etj`-G&Maf zz?0spUtLxvYi^$O08vm-cxyl}RB$l+V|=_|dS6Q`8JJ+y0^#;ysnNEqtgN$~^aACm z3FmeP4IEDU6(#ho-+iI%7QG@ofE8YE(K}H648%belZ*7~k&N`T&Q^2V`5hg*rl^Yc zuE+Isk{5<+@r@M7!Lc(28ikSxk zG`iFOY}^J+1T#F{aHRktnkcU@d;ZS85bL5|}XOZ;RTzr$N1{vZltv>Fav^p2+U*E`_#!D`$RVqubLXf>_?f^z>H!xbW;(R;6EH zwE5k2Gchp@enwlX+cE0vYlZ9?cE4!0p3az@w2c1z+0Nb`99xM(T7LifG8e+65^={$ zMqgH=J*8dq*M=#xo3^EN$E&0B%L|<*m&R(C+a*eQwEg7L5-Bd{4s?=6Sa?l{jWJ2i zax5JJgDS_wWZhjgD5-jhdzgyvf2MC~YcH!(aSLw^-KiGxLCJrG%A)rEn&I{9;h`aC z999H^#6tlwswRikfvr>blgIAwE2ZvwsGivWkXn@U@Rxz!jWjl5Gcm{}7=o~$q+(al zCkk`$jS0iVQ#%U6#maMdj#QAJQ2}xER5*xBZXwx%aOQcEDsk>{93IraTf0Eqr);9wKLhUSkweLPr`TJH@QMlbqFf4lvbed zj@hG?80sE3xljMc%tg{b{8^Z>R2cHxJ!DYrDm;>NC82r~o+r)AZPF~e{dQ3dy5SEG z-U!M9l4rhO<@CV~6{$@pFaEMqgecZFQRVD+1Huv*NPi~>fbtS5yn*XqetJ|8@aVtBv-T1l)pg3BQ}!u9$rh6V}Xe1^I_R3FB>gOpkM8%e)SsiT7I`lYVZY z91?>1kUlZQ->ug!?Wb3_$72s|E^c2d9P{@SU~ zl74b7u4;7K(T!FsbS>)YdJI45TKzLz(R67OW<(g(KNN`uR}i8&HtPMDT|6)_Ld5nt zgWcKH$*Be%1aQvjsmG2SL7zuodP|~NSV!jX1*Vjzi{m>$1uSmIx9_OqomK}@d@gqU z#Hp;<+1ammGio%|8Tj;>W40ztwG0 zIt`Y_yxGEfIWSPsH_6D#vX+;qW7^&A`(*Zr4AFvb-vXZ2JreR2L>Tgw8m~3!wIpv6 zD6w7?PI8nTH9M=VxT`dJPDiPnMM{?b^MO3Xum6WBh#Q? zsihGyCazq*ma}#~-3VFt|9Wm}ikEP5c>*EkHv#3UO~+O8oeg7XkD{WN6E|I$RKeoH z68t+!ubVtaY~WiwWf!(l7d(J3w*zWC^_)|qV=P*Z3#D?28oFxt-Qw#A-{yTh#`PLJ zH@D+HE;r*ktbZ9Y0~yXa5t}h*T6ot3axZ)Bd%@vp$XbtN-zR25pQC~3u&@=!E5F&( ztKprqj+IJlu5~!z>DxE2C_)24k0#UXemF@goYZu+2QSUli;w;n6gSs51iO3BOT?CX z!?9?j&pbP-qX@Ql?yiwPhAEEx90f%JO+^nEXGS(3cp#RN0QgoA46oB(*;YO^xnHv+ z6Y|b!cV;L)MyY;ptfrz031DKXh_2~|14gu~&Muz;K&?!l1%!}QM@vsVArYrWcYbcp z|E63M_TkHbAcD6?LDw-?d#Hg%F%gPKo_dzNh`>&qtE z!+`+l2K0vsq>hU#QBIJHg`1tB#b9pDjf0Icr*>;FJWR1*(h5H49rxLiAxFb+ z(8)_0@`J<2VYIOcOQ%*T;Dec2pII%ajM*QN7c1p#98$7#yn02$o%CaOcVmZw$F#V! zH-hMK?e}L_qW}?1kC?gIx;hsK#P8|h3dBui@sM8+SIt{3#T>R16IGAYRTmVD1ad}C zfv}nIVvAxH789fHz`kn%1EOAbF^aX$3_vf126$mT7=H}Mr`>u}EWL;mRJg1>x zVP?T>)vvu?{IClC8R2r=kcqY03ycD$cI9qH!bpYec~&rUo7Y_u)}jLJ3I*;Z3Uni5 zLs%L7dI_N@!8hl7V>u$R*LLRSjV6*3&d!nb^>{ivs?P{)?q7KZi@n6gKxbw3_TAf! zR?RlF!_v$16n(J}GhvllP@sNam7z7qQ|;gYW@JMXlff8LfPMSy)fXP>P$v-%P97T@ zJ1Sw`H>gl=@5;699G1~>F0OiZA5}6xC(xrPoZfe%z=)%UR@1|-Ues4*WrY@L8jFHD z(@7g6TBg4K!J*Bnl-CF1-GkjZs!|V^o8=_-;a)uL*EL3+w+;8QHp4l664aJXO76wE zh6Rboh>t;{JIdKB9sWXGLP8wEYlGuP$~8n;r)m59<%XPUo;ykNo0|?eIThvQ_~@ab zp|p`Zs!^;>I1Rth5Q9WT?RW<56D=v-GYjgufR@%+c)$Z&8E|rSIc^DzuRWcLNZQAK z5_I3D*L;>VxQBv_B;@PVUC8Sdx+)|{7{;dP73aGo9}JRt6D*uNl9KR{GFM}h~J~5%e>W&YqvkY*>8qA z!a#LEJRHlY%U6;*9uXP2giVKKatBjS+xD{nSIq^X81hbRkYd@y^&)e#jBq zwcub-;0sd{buA*u0<5qml>qWUxdP&g=Bx=SJ8>N=6p}1|b?Kzgxzv$Y-2?0NngJqz z`2q}GlTep@5YF}2v8cA@y3#uxtLL4eKg25Z>_cKcWebQ|CFJd*y*g3)_%j$(g@6e~ z&~pi#5N?D1T!)H9$sF@^(NZmrCGS8Zj`Pi2;1o~ z;Mb~@tHRJ^w-~nNbp7Wl$N%=U(Y99P!S&;Bu`*E)p}g25#Pz^$VD3FAm)l&wU$Fy- zTO`Q*gMvbmeVNm=q6$#Vh@k*OqYd>iDSFOyJVm*^Ao9 zZ$GV03Cc}{8Vpii-a;~6&FANA7?_wS#~%`ci;DW!I(=I7Sx-STb7p#)rdh@&Pt284 zL-|9kPPIe9nTrctZl{4R45~WFTn)q#Q|9Dkw0l1cOnkN0W;I}DVMPXvAqmYjPq!&X zWo6Y}F8iQc9rf1Wrom+E(6Oa0_I3*v36=o6yT$7Uc^?qSIuvZ?Bek@g}c}t%)c6n+lUt^OPIY2^6OSmd-WC`wFBva_v7&A|J-Z%gd z@$wS!HnZN{F2105S!$9gQlLxdpJPxw!l7c^Uz;otp%lIslCK}_2*Dum4nl4`K?PD3 zirWWEJ2ErxGxfUzzbQd%ZOiEuupXf2Y`xkND_zf1QW9pJ9YS)0dN(Gl7WTIW7wzUi zGj0)9Q`N`Z^}M^PQIakJ?wz8WriHiec>gb#Ry9y2iMR5ubWN+Ps|$GY8APG%I5|2} zbk~^?4}}Vs9wEYmc`vh4AzlW$MLA)uw&sp<2Xgpo&BlBWogLOUYYfgG5 zE)L&GSc)kGzCiayUg#cOf7x3 z|7<`ksl|)Kyga=SfT;fRa$j$rvxcgyhu>c3a34;m%oU?C!F}e`DhS}9g-S_D+49^M z6t+OGYjdKb6_ac9S0N1h9;bmpk5`F03A%$v; zi#rDx1o=LcZWAt!hVA6%dk@=LIY(2syvoIt{%4eCwJho8}A4Ed1!H?crh2 zfngX?Uq77_utwjG&lZL|*{NK9K2EWJNcP#!`W}>%am)JpXYEz5IqT%#RDw}^l2J~1 zQd(!IaLG#H4uyG2BTDXIHtp(@qhKIpsl)u?#WGa#h$23A(IDpIX_TH`DaM1T1dSkH z0L&&gDlgl>9;P_#|L3%wN9Z2}C!~JHLXiKTv%h!_Mr2pntQ(u%IT(YR0`7sd)gI15Z|5L~jlruLZf`U04234v`NPK=4zC ztvm!85PCUSFa?R5kAiCj!3F*j&L9E-PRecK>LMnpP|7O=D? z7KY0G>*4GJF-a_?H3E6jKt#72*S>>TyT$<#F<-#sm)+ulYdv0RFHiR0Bssnax|-Q*Tri*UP1AsjpYoU!A)+*}nERm+#(-K*{q4|17wtp0YjDG)UpWrN*K zMQUiL^KMn=mQQg^+cl4ngsjeoQ`2sovgw1v!(BGrjt{4sC_}Q=*y@RLJIdi*d#7GC z4&Di2#sL!9@PQ!n0Zj!Z4799fC+FdZJJ3jQzugV)Sh41^Y>ho@@!yfNmABQB(go=z zn_}i0MprpmRn_iTI)Z;cu2-I7pe_c6W9cJpPb+$>exAlJZ;VdR>K5-Up0s-Nm%`Ca zSqrzM=*OjyvA?yNy~VWH-3<%V2a#uii35mB%jTJywBFpt0pfaC-+^AArM#^S2QMknu3&_?!wAwKz57$@9R@Q z#Xxh`*#Ltk5g7m#)gnnV6O)w@@!|>yFrfs6`$rF*0l5PvCj8s17~{Y#00>3$0vGRi zrQ@_=a|i_CG=*Y~O-03MBrkq!$`$(L)3Z|+Mpikw2=Hk=9HkT_Dd${vuwb+0d^$VJ zn6D`jQWzQ={vEJU7O7;GS0v_2{~gcUVk|6r(lWp6=@Q6sY_QuQ#R^9Nc6SLqPWql9 zHf{|lqY_g{6iix-WswCOY8fiU)JNHBnit71z)sKcP$7S9dDJcs=LN&AbB^|5C$gr?5WCK#wZLv`38ZX6+peA(=PV9L7??L2H5@504Sa3*$Y@#quQPs#MH#1Zq{#Y5cPp1a{!1zQ3$T1Krb~xglnR

9JoA^@2pN^8-Qk|W&<4TOZ(2AeYKaQx_k#=3X$taP1h!UTO>oc=$+jy*Zh^Y!b;=lzRfQe>zX&@R zpApOr+_STivFM<{0Qc+4D5fbwvSO|ZLcH|>qfW>F3)%xRA`=^xqwYz1xndpJ)BaTt%jyQeG;bN z%M#5~fe(C>`tl)b7~ILQ46A~bZYs_gB0Qlw`zw6%r(+8%eb!QLhPm6iH> zPEb%AP|hrLH+T`t>$Bzy$auvum)4*Jf*R$o+AS%RSh&D&M(nog&7CbS_j^zBK~OWG z#zFl!CRU`@YNmr2HTGr1+#n$Ui*e=!-a%vf-$?%R5d`th)463jy5a%wWnp0wj{_(u zD8dDP|KQZxQ5-h#!hP`^+qFn7Ph%5o4eV=MtvR!k{70Vw#TUASAro~Dl8VdkKwIVw z@lBR*7Pz(PLCrWm)E&&NhDu5X_R;aR9KaiH9w1Pkl?XkfRZuuu3I)(FgWgnFy#ZZJ z`{!5G-DD{vNpiHfkrL;cu0;8UuTn%Ru!eTfF#=^Sl^8(=BHNyW^Tr(`sz0XNZ)9e4 z#lJ5CY!*9nsRQ*Y8rzhc+dB?o3~-+`%!KnV>Nsn&UHuUkW}A$cp+jIy9{CSsALC=7xoU;75vSYwhR0*xV$mqhMpc`s!aRfeO3898gS+OaDTR zi>_Vsgc3V0a&hO_A4^%I-@eu}g%0ep8LAoS`S5T~_03d>MV@epAS_J%+@jdvqsL+cwE@pn(^%&9z8lmy?+0FKCGlds%QeFpq8!uBzuvrNl5#I3 w7k+Cd7<3Qz<%%{Fc)@cM&ip79s3M6gN2~DU>ZB88$K^)}doE06+ndlN8tVT0Vh#`{B(k59WMIOy*fr&n00| zwK;%?w=}kpQ58cH7b_|)-Iv-4{;JkNVMJhb6G@NG8cwgR>OmhBbgV8mKdnwrAy@=C zJxH+J?FdxlgjOg`7wY6p47$GqLNUZALhs(QwVvlr(3rX0inMR zXiX{eC`|LtY9`MZ_HjTwV%Q*Dnf()Hn%Fo#a4#6#GtdLJP&aO|nJVGuZv{}`PHk>( zuC;rTaG0ej(rvS@ppg4zr7e1lrhUvRr51ADsxDGUWix)2N~D7;^q3s6Lm|<*rc&k# zrlp~2@ZW^ErC6S>cQ!k3r_7X0JU?x?T5|Fav;@8djAbyy+%?xU1fcaiA;O8&B7XHj zQ)UxB02Zm+YHCVGfjHLMipFw8n_F7k`o6Pd1s=|o>#sC99B!iaWOh(Ehh|>~yVt0; z6v-vhg`i+9wtH@bqHWWo?~X%rGBU1@>+v`SQdtdOZx(Kv9oJGuEZ5rH$#@+bB&j+* zPL_j_&O~3XHNvpSJ7KoeTa9J=dw}KT6VQM}-`DCaSK_H<6ck1>c(g=r7th1UPkqnU zJNaFAm7oGe+SS>Bmb$u2^0)gv*9j$3uF~!mQcBajFb10#NO41WM8waE3T6fdoYMkz zEx*Tuy^D*=x2v27jbfpkbZ@`04EK&%R^zVA>cBCBj{EJ;m0Kyy4|VzZqoI(ad56XB zx5+3r<=5*ODcGtWU!TaYE-$I5sFoWdCPsyNPFxRXbwgF}P7P(r@{D);r5U-}eHHz) z!Fhn7KYtiEMIaEY*)Q&TdV}HN;qS=QOO!G*(iT%vm-nX%z!DN6!T1LU6YBW>`;%&T zpxdJbr`P9Zb@hb4UhsDeqC!=AR>L-opr_jtC={xptBVw*k}dQyDRF{;@ScZ$|9INF z4O?bE1$XHGiu5HrWTddUAUD;&HYv{Bf_Bsanyw zgxbwY?s1$envKhFz0F;Q)d?3Dm&$??5b*Gi;fJUQClk}tYU`EVLY0b2&SJH(DC|w; zbEeTsh;2SM%RmAbWB;3fi;ILApw5c{X2*7e4{<5;44K zbBDpfPXf@>-7)=4UMEZ-@WZEFxkL;-ntWb|Wq3fR?_EWOreT*KHyvF@>T(8mw{jL= zcK&3WdnPs*OLTQG6r!f4CiBCp$$^9oH^Sp|)lj!=3zC+QK#Gf-mFash{E_^lckPBC z*wwhSM9OIW-%|YsZiM9K=ASCV_GnUm1J+a$qq%x^4vx*61>?0gZu6C<6PMNw|EHY@ zyumAV1!d*O-OTq$NJwKD+)sO=#@h7oN;>yjQ3s;0EsrB?sSNnv5KwLjBK9*fh#koz z^V{5yTrPKP#oM+`W%f0UCI?CL^q1pXAA9dMa>z+Y_OAE*E{C^LShfdZ$s}M~nUK3W z={fLV)h6iac(!=q>v&oOdmy&VA|YvBCx6}cN&h(SjQ_*G%frLN1tVXnG7Q?-8V)|N zX%6wFAK8K6woF&tH3dy<&8A=8#$5rOzcngQ&PY*5Hk*Oco5PgSIW!dV8wXcLR!5f9 zbQ_3r2przm_h3B}DLwD!RHMs#56Agudje`h)CATlnCE0}6+gncVCnU{9y$Z1gdzSB zItGqtadYc^N0LmM<&&s16_PM3$c7Mu5Na7?cy+K0eW*cZza)ccghs(G0@q`OOQ;+vqJ5dFbsxS)(L?pj*!@1}3;7T%F9R{ty|8ZctrqE zoK5#fk7X(-$eWp&=lFf8;OsaEe0{mimHB?--Llao?5mv3$78+TZTIC1Xx!Ist8n;) z+-KOdbcN5A3L{hl$dvpR6!sdI%%WkdajMa!mMK@ZkLqJ;hSLDYn~v8yR3Q+^%V$dHpwF^CXj( zW1w== z>6a(SO0zvj$BWt1JLn@8aTYY$o#77btTy%7Xs6foMcD86&=UkA;^Mw6_7?m7#%z%f z;WHao^4}2=Hu0|wCz7nGotzGBoI=lg$xI>!Er0)ZiRws%Eq1*;dhRclX>W94^d%+X z8xM_}5uT(ut9&dfjP}|Z?hOtWY<6ml{Q+CXcfHCk?`=Iv3(fU@g=VKUoB0lJlic3t z_VH|yB_S%8$w?Uj&x4Gl1V2i_ryiKWNJtXo{tXg?v3(ea6Jx`l7fQ*=uQb)=<)_PS2UKJ&(_Pe-^4>0A{iMO+md|Y0Mb9m?o><0JIPP?sI_I#5k$VL!Bc+Nux9Kr z2bzvp8f)kE-9TXEWI{PWyht4?;QV|?w$iBQu<`oxppBCc2(l#7g2=Dah|$54l#UJ| zASneO<_q=yM=4i(;}Bkl?D@)-e+mRRQjLx?^IHVT$;t0QtC_reN`PO?ctmsgb?Qg} zQ&aiGHNfA3I}kj;WRyKxuk!oyM}O>m`V`YIKg)NN;9IvZ%Hn$Ce!%Viny;76yut5) z^Su=>R}-lQhxu(@jEbsc^KrN@U&Gul00G6YGb`2eAYT>Y7aAI>sjW3PJ3C}ix3y&k zP(?(Nk{%q|sY3`nR#H|{l2u%8w=2=1BD&eJiQ0HiN=k}D#J|}p_lWR5g2M_fx1xcI zlTp5fL@IBgcmg}>X0F|=79tQUCZ(#R)Tms77a=LaCK<>O4!wa)adCEWQG=k7cLITIg=~Cm-cx7gZ%Im*G@J^&vccMup8$QOP6_eiY0VSW! zqJ*t{Zqb(p>xHT?0nZO2W}*GUFy@hH?9*CPa~@d!8D8u$N<)&07@*fbs6aEFQmKz1 zX4YN^iwuU~VCDd@S-VHUV2mh?BTX=Ae=cKOrlqA09S{{nL(pr!C8$#21JkSKd2JSz z(f0S3YgY}83oJD1^G4->aETvh@6oJPUK+pj-}UrRuKTOOi&K6J_O${Vz@IsCC78@9 zl>$^lAKK7kvSn^xWeCd|%QFzUHq|eyMU0;>MT?!?rH$URdLf_n2AVFh$`T`yRlEr} zaFD(sp)dauR1iDJpzii5=Tj%zhcmX}0TgQwI@x{Z{Sj_I!{hw6z80CAyPrmQJ|dfq zoJd>aPVoG*t}78S|LNCtdQ}39uXj3M^g^ISE0IwjBqgO|iG_=$?6U|y6rPFvP}H%} zZctEmOwGced1e;mAR&YzqG6Rzrs~KB*Tf;B^@4FjAvChspoIUDRlccCIKX?mbdZKv z5i`5x5tXQ3l`#+7gzC36i8|Waxp5>%?oUQcHc2wzzn@<)iPT!u)F(Bz^{97VIbMfR zUua0j;)k=8EXIqGi*i?VWq0kVOsh#DU2&t9#|gCQXTLw7qdQr}pMwu|I5#4I!K0pL zDn`r(#1CN34LRx`$eCxqe;*Lf5hOe)6MJ(l`h9HDk=+%foce{|@C)n`E6c@>#8MNN zMg5=6s6beLcSfDQx2N0N{E=7_o@Ul4{DV3}W1durBRK)POWFQUAMVX3 zHW8i-d{?!Se|C1i85w9EuddYBk3)q5vh)K>UH8&JEPndI3tivX*1uU+_q>vbd=&Sk z-^T#132zLa=<}wszG47A`(53@(A85>VWrM_`=Q>tkW+U;#2*=h7#`3sB}EeObhCSN zlxJ%CBZfFRO;i8f%l%6;0h<9J=m&_^%dV%l?+J@tz);g|v}37WUC^z?`$b@Y-D{D0 z&G+#Sm$-=NMufi3{^^4o#rUKA8roG z14}iv6tlP(cvx>sl0}8Q&Vxidrp$9-K1E74vz2T+Gls2yvkGMM*k5$Mdc2XsI(-U9 z_Ydg86V%<;S&3-h6U2$?r=+9=Ankz*+P@q>s76g8eB*hg-p`n5)q>V1Tysr<}^lAzn+EESLAqB*r~#-DbtDH+ZE zzAGr-HBAf*>@j&Z&_=f8lNlAu&YDR<#jqT2sU^h^_)3Kr)sHTvYU>>FQX>AdMzK2;4V9zLoFggLewt& zU|TxBLJE&0$h$}I-2}{0hT$ka3YPEpgv3JINhgGSc4vpF!`>Nn`jwgQaanrJfSjG% zo2++sEu5BGjLN4x_V42^RxG8Yuvm92GD#;QMhp0t_L?0HPylEr34SbEx1A5lt3$oW zX=gO_d@Zi2tR>2%-M4oeA>>5!wXS*tDPvD}r$jJfwQ#xy_c#4|FC;i*q3ZSFj7ghL zD0RKUJM{d-(Dzy_sL5%`-bJW~GH->)p~L0j63={qUmI^JXmbVj4_|~f{)o9alVr#E zP8}K$drDoUwW~G_DM=dYY>Q;2+=Qu&`{RNWqC#4g-+J>ZHx_klD zFTcSUX<{`Zv~{3@FUSBfy2L526W3tZWUg(?W3R%O9eDk+B78Fwc3eu%0MkA+oFf1n zKxxLTcF~DzFOHRCfN*=hC)c!r8^b2OZH>nJv@q|FUEm%6GuF8!J%WAb5>=R#NneCD21il)|?c^{-J#eg~U^WYm znB~T^fLvf(>;@&UHyExvCrD>f7ZYdIkWLx2`it%$=(eG|*yo5i8Jv|0VJ_n6OZ;oxR(5uu8=@KRAU4Vs- zx32E|(hNXV%_v~^`alHhZtpv0lPDDxwV?Y!FQ)bW&%a5YPxF;9oQ~xCwy#+9|q;4?hKcqQt z7nqxU_N(vcs5p+{-7^>+d$8@l((;QC5?Q;#QMtGi^ zJRV1R$w_YR3Ep1rj}H=2?oRAdvsURSYin}jR^E1FNMLv)bTPZgUUV5KT7}`X?Dsd0 zlE+BzWgClm1Xctw?D@^BFa_T4Wwox3TNV{je+cAk^+y48STBt0x^AGqL%Z5l2=T70z`KQm2EZ>)MSJ_z=%qK9p21_ZwVNgzcu`cCl*EG;v9wnY%OZGqcqjms zSh5u%DqH|OJOUhrBGGBD##z?#;VMkY9DI22Ol5l`2Cx|1uWK8#WD0sJ3wu8-+f^%P z3lYJ9eeL?d$!&i!JD>ien4J=ulvKZ<$MNo){Y>#qI8NVaq=|)!Kjnza&vKbqp|3-6 z)glug_$*2dSn(W7Y}-02>|rU9wqHuGGUe@;qp)u_U&@j|SIjWsY~}Wfkbui9tOVk0 zvR9UuBl_eR9FxjC&e2mg8RD*(GH2yMH|Cis#4k)kBUy%l5VYABW@%yHY|I+?=I;O# zJDoaA1?uC#d4Gf2?3Y}i%Di^-iVNy~(}ie+^@5(K|7iG})-yTNN4I=qR^o4@YKV|H zq$u}}fD&LZ90eEGtc9->Y@KtW!k7Eu>sWW99@j&$m5GV`Im5bGSkPkXMMzl#%4)7?kWwZXF=0G*l~6 ze>iF0_#o&}(a@k+G9x9))%@lQlL3(cKu`zFw(cFPvdxF9C0JE=7R4swIT%U|lO8ET zFE6XQUT&FN4IK0N6AS;)2=ZJ6gQ?o;x>U>O>X=zsSXz@ZT@QadpJqB5bO)S{9>}qE zcUqO3Lv3P|<;B+JIQJ6iZko>FTPOl$-*@3To$u z)m`&><{4-uB&xwf+2Dr|ED;OBwFTqAxeo6u_oMkr;=FYm>zaB4^2zZ_zFBgV&3nbDhHDu#Z*Vli82xC>^OeH&fG?o8XGx$NU zAu!NUS=leM304|?PD-`5Uz(+2W#w=57t1wUBFM=R^^D! zj~_pHvzua`&ez)SOrovFGRBdgc`iR=|%d_6YLW2qy)TS8xB^v$9 z*Kf!UY}o!zCV9d|^>^CFE7Zn`sj&D>>N||Ma7(I4fq>D`7tnxfTHFqq5RWh8^=%Dl z&w48`^|bf1*g63f6AOKzO3V>rSd6@dy-e$I)+}*FYPm3r*RKDU=nbtWduU8HcPK>J z$ZN%6aIp>Bu&DpBW8uTlQb6_aD;){H)WO-Gd6$jc7z^{`0k z4~5+POf56yJ!FnPVaRxqfVh(-{M%$SoQzd;vy}^eRL1By4*la=iGEbgFGEi5{Aj0> zf{=#>REm(**~djcB%@T3bj8jPtA$ffd3-a9l8Y9Oq5s}X7=@h=hfoy~F3l_%#17Bt zk~M=b8D#SbQ9zAL@Mrhq-Vl$-yctPEP4Pg!j+0iM8L;|CZOZRTr!xoYnh| zVY;7%$RK8B@{bFCTZVU3!NLyLzQ*ePN{&^f?Rdt$V(3ua@d@Meh^0~z1~<+(!k{|- z!qzf2O~j$xI_XMNb{qp}b%wY2FP&&HWz%2x|ERfxAP;r6kE3tHfi(!ht|-)`M-@S% z8{vp5TynPfFb)-qgEXlFcJ_90=z}6rwpm06z7gi-=+`kfHT7rdga2|6YU&x3nQIX@ zsYhuEd>*`fnpF!ir}~ZjH~+wE_H#D=0HNaHE#G;1N7PDKKDJ3N0}WoD7{_~xU;x^j zWT*ufIEWsdsNttE@w!w5v*8DFo#pe_Tb7=PqQ*a>T~>-<(-h?0I}rgnb-XsU1^yc5 z;royrFoDb1w${Og) zRo*=D6xsls3$&H<`%fVpcG8mm@3Evv^Mt*fq0IPS62et}fk*3@`)c52!pG*1dccA1 zp>&cBX#|-s2N`))&&@c$_NBRN$8XF`x1B@h8Eq=sC2$+N;wBOx&)W?9zRYf|)D7_j znb)#4;*wpwlxlg6q`Eq0sNzF=LtQ;!tfr)(8`hcKR-js*H!!k41AJ;f$0TzrimvAx z>d~;70i1GOAe~y%A9`Zwh=VMi@0X})W53F){l=Le1_uc|a_Afl9)2iOGc?-?31Q)$ zFuC<;JuO~V(6#aUpmK)BkM0tv`kF~Vz0$Cqn(_skWpve|J+r|xY2aQt{WfEOMAyaz z0a%R#2$$U;TETD7C0)2kg5H2WPyHf{FV0Fvn#|*xwQ(znO3THT3(iU~X{u3lZHS(O z2Z%|QHn>u}mlQA3^L+fqV@wmk3?>Bt@-8pFEgO2e)lSv%k!dg#Cs#OXi)1c?sTit6 zO5p*jj5N^T163TG21TQIx@PI_S_M=x`4H(5BZkk`TJ2DXfi_ZAI@FF0Cz`$d%nXbp zV-pW?$BpmqAInrfX4c6ZzL-Nf^uKHTN99~CYulil>0Q0sg3csCBZmtJiZijT2DE(E ztUt=$<-v8wA{e%7SaF&+nA%LJJH+&CECK-N#Ukb9XP-XUFd>n%0pqUG3K&ObeNTVZ ze<>}rn*L0cTexLps%cr~vtW2b#4T^n=t73^>`Ay6ror_l$LDpZ-5>nM>r#6*?1*9VAmjmwV0nw{HUr90Kfq1 z^?9b0H&`?30t!A%PN8R1O=ne@Gy;nHi6J@__PJsSob7wD@r-uLV0h^ZegsQCifXVtg)i?LUKzm}u-~ zAvS>d=^`Ekhf>r(CcS2dg)cj#KDk9GwsREv9Cq+ zPIr)XF>#XT`q{3%WdlOMHi;B>Yp{KRw7zj>O0u!PlJX!|UO``>Tu&SI!!r2T$T%F^ zN;jq0_O-{NDv(=Btz&~*yA-y}i2r&4it@s#8xn&(is@KK65U&HC9pAzh(}+_XE%uj zMM>&u1yJJ%eKg>{6eZEfisMk6;!4hGerlD<=zLgqsVzbDBR69j721AOQHvy>0X!ojj4NSu6NjI>%N!_(D4HGr~T~vxk!saUYMvH8=bXG=T zDNgmE#zvP7X_ZOc+HQ3WoJYX5*85Kbl~Pl;%wu-E-FFG_zRcaK1w;}a^E9>p6mkxg z)&YIO=&Q4L-p#VZs-}t=s(e?>d+_{0N{uQ$JRf$FW0O%#ABvri@vWsB709A_D<~nE zFA&xeE~eTni6gU*n;R@T{_EtY*&s}m$!0R}6m&7SV{k^oiNI#bqFp(yi6w1~U%%HgO8?6n^7 z6{&6uK6iFND68#czz=dn(+T};+)+E7eF+v?kdrg+t@W^#wo;4KxsZ#w zBLk&e?Ftv_=PI&l0SpQg*r}yt`004Ol8z0bC6-2EY#eH>sfz_32z@zK_&3b!&isBb(=4B+_>cf}IK}aPlRX@uSgq)Ig8qNYK(5 z$1I1B$ZV+D)_LSR{WPSOc_&SHZ`PD(6AStaa~@kv%!s|f1u_nA&2-Oy+^3E%^7Q8Gvc1o1*!Hq73**TJeZrLzSLF<(JfTO@60mJS z!_0oPe+*QXQP%Bp9Bfk|*RbxmT5rnt3AE`|VDda(Z8hH;C(}<+k&i>XC0(Oly%K%D z)CZ1iNb;g6M8gw#@E#t`i%|Ph+Hhe$&E>tca1wa8<`5;a?7z@k!k7d*zdk>Y4B2pG zK76Qtpf2cWI{A&zH5tM}yNIc_SF-HvfGUdkmsEIIzet-@Apn>!)|R9a8;!zT1nnx9t!HM)ymCZ1zbs*I7v-dYyUsTW~?pBAeNv)){8|u8ya_m`YPI z-sX4vyt3b!AFf`Ex_*K0VvYAPx$oQ^8~DcZV=jOX{HuuD1c%x!7r>D>pZ2Fh_rgDq z_djd5ZqFvUlxCvkn`&5ifc%UvvGszcr(oS51vNR zt3mRo3J>i>l)qnwQR1`zK5GENC%_ogWebj*w=i&|*$nG~`7LhtHAD>dAg?S40Os(a zSpPY5FL(=8?j8;p0h{FwYe|yrEzy-F%`>*c{+3!Fr&{B@KRKDbBMrhuPbi%sI9ymA z1Sb$=Zrn@y>~^V6emPbLC3Gwr1WUR#xmvt4sM4*hxf&HqJW@Qp=Y54HNL2rM3;DY-KeI^~|QQvWQ@ zgzI|^&WItKjbv)j?M0er7$ak#So#&k?Wul7Vm*3kPW1H~8as(-3 zC%JE?)up^zIE4%t#-0w^75hVx-fWyi8)ugkHjLcY{U%#VDX#+WeR_swOV3Mh%?Iw1 z3`CMkZgGuEjq623Ii)Vm7Kp`Bxb&RQ>!p10@zw*&I;m+(xVZiI|3Nee$Xe`}IU(v9 z-5%?oR4@o9n?28nh#0@xC`x)hf#Gn*boX=F?04`hW>5vpKvD1f8f=p%DS2wk;tq@6e{<()@ z9L*yal*~d+yW#NcsK0W-qLp3_BGt?IBQd~t~k|6G;~}gbcw~1 zjBnkc|;4M}|T;yvi`c{o6%7gU@Q*2rmI>+?=5h6Dn^kK#rS@MsBK{qVrC z9LWJfJ}MW!YY@mMBE$onw95pLEjN#N1>{Qi5#rU}O8@iKb=8+Fgk{Z}s$C_IXQIF3 z6;*sse?1HSsjHc%#;Jn1EBiLvf4 zhhk!xkE(>1%pB+h#0o|0rc9lU)y<2HNuz1(T?j76Ian7v_4%W%Y#_RGB$-0yRldro z;Y&qG!T<<6--Z~D!VwyX0>F*$`lKwO)&eP@@EojX_S~R$jKDUD#t=cPWhQJgN$E$0 zYZh%D&moE>&H9B6zghlW1wf*Y!MbsIgL}Tx3krZvi(;#{vyOUWhQic4?5z}O*DO?Z zyj)xP3DHoD4{DPo$izwt5ySpYI5fMRwxPIOYz1&Z?MBQ@6=_nz#f)9)LH|BvbKcXO zZjz7I4=fg3{fGyWGYrxV$31|epmHY$89|d4V9Kj;y$(`HBF?veVVm)JHoN^X2LFIB zKCI?UxI31A3~|2q?Be6s#Pz1(k&pEBnN0Ij9qJCrX~>F4F?0D9!zv$TbUpLDer@k@ zv0bXFVr5VmiX5+iCo|O9J3IyHnw%iZn|wyo4&~$09H9DE zE;EiJT{|RgpEB|uMsTs?I|0{Jo!@&q*0TX$c47#NWjh?NNOj= z1UqM2+{Me$7Gi^KGr-BoUu;%Qoe#aPNSBb`wJPfJeG>`;Z-VNZ_rq+QgCV!pFR_}v zA$ZJO-jg#ly2ZAU+vGBmj)v^T#UncVZ?Th9?;t0%7_ifMC8IdToNIBn#Jk(-D=AFbeJtJJuymRN6GyQX7 z7-_ST4I}mEqfI^bZc3!y}|c?!049>ST&O+eOZuR58!4( zdG|m1p*d6+=ACP+kU$WF4Hocd8}*2$=tgm=P@VXKrT=?C=%SeTa-348fb8iED)8h| zpN`36oSE*Z(<4aCdiicXxNU;OX?e7T5Aa-jgLGD(n{GEN~3DP@YpRsYs5 zHQX0=@I2my@B3R{A$#x4u?@1Rmr0-mN-~{g$7}Vwjon+@!6Cy-;7Xqi<^<)Q*3$sN z)@U|fbw5{(U^)IAdyRqQs|khHGBF^HK}UwF=0aUFGz{?!HVdr_;fXvMEmwkwW-1|Z z{)Cf*+Ds^B*Iv9*?#2&3rvp*y>#Q&GvB1+{dsa{${jocjhr{EI$WMkBYbzBB*@0k5 zroFq{pY&L?RFX=c0Hru`DJA6Ks1>nfOw#JszB+`Vjguh44h|LUpU8ub$y`EuQ%U7k z;{$tK_f105!998)z5Y1x&P{-uL`0{^iVDO})*#9l2WbrzbI~L@cA6Sd++sQ^t$aZ+ zMGB4m&Cu_$oA7-uk1op&5P^Rl(>Sv3DUggu9c$3xXpiz{cTekfU%lyd1==gm_X|(3 zWt{*?H$V!41rCC#D1sSE33^p*eqMhWKDb)8A3!=Pj)Mk)n@|xf9cR(w02=n8L72o2tS*Trg^=`^H`>I%-DO4Jv(SI@&t zGvRO5zL;{FOzHWt)#)EY49QsXK{#`~IdtAWC|6M-1d(u4kAc;8)!^pO7w}2&zzEog z+6bQhDfkqMCm&Eeq|-N1rBt`!HvE0>Zwr{H!+*&IEr+w);a&TLi%3yO;Dr4pm~}DR z7<|A#$2`cwUF_>YrR^GO<75hGL%T28Ybt96P)s#ngA7T%>hPho4^iR+E(>3j^CKIR zUbip|LoP;C%tjhHSIFy78XHUXguO`w>-wP_PSm#vem&qUUTZK3JBp+8rJv(Tg4a6G#_v)G#uth(tCti$O?`bRIfyL;^Hfu^bjgbQ#&H91ewa z+Nh@`i^f+bSujOzGQ)xH0hv1ze|R$mZ}N*A>9u@6P9Ki;iv-1h7zX}k7h!sES%v%CU)HT1UC>K6ZXX5!HQBHG~)mR zh@cMQZ6OoHQ-}Eyg6Re`-EX`@kl2gq1|b4p7|YtfyeD{N(2f5yetV?riWOR*FKtKZ ziuwx90!}|-EW%s@-;8hJnm{67VC(ye4&$pfR+mh>GlMlxISA`(4PK@z`< zPc$6qd(!Z}e&a}QifBro7wZtStNf#OS9PxyY!AtuD-dm<0xT{l+A8h=&(Al_-^>vJ zspoQl+Vw5EXU*V1ASzd24rYR)Vkx~{oZY%zLUV5OvZugiB8il0`SAkoLhZ@O>BGro z3;vp9i{F~Wh5j1$TFY8y^XC&aPe(64fqgFouW`@&Go#tl#qyK2Q+KbYPEIdIPt;!~ z%NJma6XfN%xrqhCvNp}j_$|%Al%D*csvfoAf;XJM`_HKOcmp|oR&aP8_=fnjco#5I zQ2tN_;;rJ*1aEEIHOJo5o;LF=_I{kzrnt zagbQ>yIroBH5V7hxTZaGPH`4)D>ki z;V?2M8VFh7H}TaO>G0QPFIm~y=V^ zkuQ`#sDiD6o2PEWY7=|=Az8oa2gjS&^TP}3hnnkOSFP774<^Tf`A)rwR;=cQ_vDYz zFOxU?2e*C86TI6#g_qkwEJ6H1f`1DV8%fCtKwg8A!HmH@@7C|F03ER}y%iy?ViRIP zrdB)QWM^b%v#mw6M6xP8Hn_*qjSh`Mk78GX^{hTHZS2s9@Tm0gcJNE6%1Fk9Usxv@ zm>BB>>KHdT0}OmEpvfsX%=HJo3h-5XYxleo{*drnSb9(~bBMS*9fZ?W()no((0MM7 zsx!)L#c_E$pidaqiI$Ud9LKqUAMG z?Ru9;mT-XR-Q{j>4qDj@UVDO4IjwTN?)(!hQ$c zf4ajp0__r;{Yst&=`jthrkl+5*QvJUYiYd3C=b`MV$AbOM79AWTQiKrX`=L(xX@Ty zSlxwrTz>CZKj`P_k1GX~jrs26&GdFz7q0BW?35RnD`&EUf?;fikFrN6bfX1~`Z z7;*XY8d`I)b?NHxd;%%2JkRC|QBOzfe0`H6qMKr0#)x5RYr%8mU&SS!RHyQF5tmG7 zmv!{E(vI=28vDxAY3e20mZnY%-L?9-E=lj@<@QC#t$_{APTX_t-+}iI&kf7>(!U+n zX0|@x=3cm*p|GK(EmE{-I&}RS^m4kRzXQU`k~rF5Iq+S*%x<@lHVJ9Dtz2EDP%cv5 zCjKE|7Fye+b2t~u@H#hJh^SZ}86o;PFVxv_D0L9KKs%s9B09wH^{4s$RMIA3hDc~a z#L#E@%;>^z<`(wt>UCc%PFL~b(Xo5Ub)nwP0--r9z{;Xxt zfw#WW*rkiS`}&Xd@2Si-1n0Yrg1~6k%7gmfn@#=|4-D^~uO6zoy6d|yU+JuEgoEW zNwBc=rt#MFuvD@<+|c&(+IL}*cs=maX=}Z}hx#&M`|`2(&GnbX%?PbRLo-va9M$}3C59>Ai&6OfW4q_qM7DAr%J^gK1p ze8^ngU99aKt;jt6T&>9d12?vz<=J)_`|XL5?+(~5@R0Cf2kv|Y3oqNfFJxoryK=hP zx^0x%O>`(^QE`Y*kA>`s?^kmRfB61>U$#q`30UI`H!|jNvYI0QG)2&#tx!`Pc{{22 z_u5b4kf4Ku{Cr^0Jn>0O-bTPHZ|3;n?{*+hSEtm?uPpXS*0Hz4<42zX>MVotxxK*L z0%T^QiY=$xpsPO)@I;T3;dJF2v6L-F<`UdI^|?C>h&qv7Fa1-5Y4P&>}334Xo89}fEc&=Aov4^ z0MB+U=uVVYP?EoZ`1i|Z0WE0dvwV)|LlphkU)a4s@qw{R}3x2R@rg3BY+qV-x zwCQ1#SmOD081bm+*5MI!)edTexpdZ=waYbuiX3;0m+W1H-i zpM#p!z7pzce!WZqhi1CG+Pwefm6TOKY?=M;VMv0vtq|zMh86jcrnRLSqOxjGoA?>g zY04IUJJ9HFw-?5Y4D_O9XTjSG!4Rml@)20-UyK*V8c}tY6e*!X-yM(UEKgaS=E#rt z^NgN z7{y>d(1-^4FIsE$igzlt4=~|NZY{ zVn%Br^1Z{>^-sbR_22~jOADiM!@YfKj-&_DI0BYEzil{tk8QZ6zy$I*@MhBQON7O( z{7@a+yS6Y<=WnwXIsMo$Jl7*b5_aHbV1_I4u8U{sZ4|j^U#?4e9Qd`oIz7!pF^8p( zYg+c%(4Ly$HOrX@aNeF2!I3`NJ$->0*!ZUNZ1FbJbWsdYeLJ}RDct1_{G&5! zVKqfCF6zrwgK%NQ{?~m}F(YI3usMo`dmXFZ}RvW??PjLg~Ru%3>=40B5mz{SNYw~o;bL+z&98CdC2 z33`Sm?Y`VN(`3cv}8(kE>jPLLo{<`b??IP06y=P2$-&lEPQfgjO6zf#KH?r~w1 ztOf@QVPfTOY=pZ!^|*PZn24jo8k5emiy^aq(keC{0amSoO0YR6;Rv+cR6Air>>S`z zA|jv{^rZQ2Aw~*e49$xn04L~&tbA4}Snz_y-LUWjb6A;DWOp;!kx+PHxI4yPfPuJ< zgz(|VCb~#=V|M^$7H{>5XI`Ri#xi29Fg3)|^a_>-BLyR(J-KQzSBk&ewD_416DzxNe^MrR9;YsD?(g}d6wPdzF(EzHvp$txzhSuC`vz#>n4W^ zF=o2f9a*U}eLzzf2V#&0!h@V4!9%|P5!Q)yAAYTGzg&Sd!Ky`}35&M{ckgfWXWP>|Tf$%3 zOCA$H!A^RA%Ydn8!w8ZJgk!1mXbwO@tTlM}TU`%7Pm<6VN z03ZZ>b(#zald_Z;h8MDzRd*;UCvCii7hvM~L`((OTu3k!kq2SmDIbVXd1HIai!8y< zU@cka2qHmC>)AvZGnLdqXMi31#4wk!W0>NT0hx$)A~8f>&PDH}m>sZvAw#6B0aOIK z%UwMF&YMOmkEB6fYR(HSrEZVn!djD#L?X|(@Wwfpo43J)B{LF(kxq!;uqrBKk3zx{ z5(mm-&79-ueA1k-1X0siI_jTTYNtm^0=2Cy5{Q?{uVhz+RsttXn2q$l{)QKl!vwJd zkQ-4nLxUqZD*<5?;|NL!S`DEXcW}j5KQ7RYs7{*!uAh1t25ZO@(M%&k4pC}2ZArup zQ3VLMq$AjQ@PS8^R0_|{^1F3PUr^tg1_YeMJtHf)50uhCVg=#nJd&}3SVmP`2U!R& zt(00i(znH6d@;-tSO^OQt@Yw16e1Tfst6Kft@>h4lq5J5CrU6IQo(FL`tW4P5gg`^ zNk_A$Tcby6lkc9;&`|vzWR{Sy(BpCoRg5AW@|S?Iy)t5MN1(+jC9;Jjl>B9ar7iF`+pv+h z4jROpXcGj?3;1zD%V}*QX(G89YNaC}h+=;cE2(%?N4i$w|7rA!L}y%^%M%Qe z{Yq(peW5_)06_weV@uB9q;1BLMeSfgc|ZnAl5EK2soOx$1!&dPl=6OMAkyp5ab%BX zk?U^;^tj1ZLT{SO+m;J;ki#!8Hs7#kYCM ziQ!Sm;Ubtf@s!&ULpG(y0A}L zzZ(3Cbnqa{0)*)TfjSrr@P zYVUN|?H&+*{RaH*=3?|9GmWIY4ZG12vh5m;a!gyvbk+*96*A1LWCnHG$c`c0Y-L99 zYHUBQ27Ru`#d{DEzb62#Tse;RWBUko5_+w7gLC}a!wPD}DKl?ZtV8w&(XU^JB_3FO zXz(lf46=2RBV+2S0jc*`g$$z34=aZjy9Qf=PB7S*Y-f*u2M{{fts9np2*seDr-_xK zmCO#2j9CU1(gq3NfmU8NqwjiG5@)Kbv?_2unoc;2D6M%eTWnIyvZzrP22-mg)}<4% zS&Nogo}eRl_X#_rM;0H(be31Vek`rSN8cKDSl>$a#yXPEe+c#}FLe>}B~6Fn6l&Hv zUF&zBMjr+mtb#V2z#dh(@j}%IcJxY{L@~o!9bE|yaf>JPK((n)%kNOkv^5$PWbi{P zqkf|XP2Z4veg&*Nj~2#fW2aq~)Nt>woO}i1F0^*qoYhOCxXt#+Av9NZmI~BWG47C! zM9kbg;k8AfQ42fPwdC52R4E+I5RLIw-?HZjwv)@=!1IjI5A?9U0w{d8xlo*qlK$Y_-kN9E7YY;r$^`2$qt+AK# z{E`MhC75#mv)FW;&l^)^No)C6f8bjV0kC{173x5VGq`+cyNYprHiQW_ST+%-6cT(0 zve;Auz#8gCVi{KZZ)62+;XU>kWH@*fjAOb$q#M{=Z8!ydI*SmTQXj%PF1}GRGvurI zK{F_|khUX`KR=z1+#>NB4s3L2)Ua@M292xe81D&)0#>Zdp(3_bBZo)a4J?WL9Z%m4 zq{a=$?mc4k{UY(V*-tI4ofK+Jn(<-yB?(3kbBOYD?rSEK2J6>wU=43A4ta!5m zX8bHvAj^w-J89XQnlHIw@%aA|4<*l>(e^hK>NV`$`azgkFXu)fdm9UL8vk7Uwtk6D zba|(_clr7IfspFctk0X~`}IrTx=YHogh@(E<-=Y7mS3M=(C`#HrVIrEz_mFx$nM$itb_RKfJ~E3?`UEM#jTfv>k36j8}- zg{q$mM{q6{8-m&cBJhL%+COEA68HQ)f2RA@(Np*29UOpnRi63Cy!?5K^!-yNML2NQ zzd+!FVFB_|;#$6I=YM_Dh(^+P65c2{zB~GRmhS%Gr9%4gP)0TWEro8pYt>D#>vrmQ z&)=W*FBg;N(}_#Ama_9PSkfAQN?_p?Lr|iwwxBM$9IXdmC~IrFYMKCO z(6Ldz!5DhR*~xB{&Koh^Zj>B~R!x40MQIdpNP$pLo<3eX0w`f*a35b>s6Y_nf3CvR z;`r$PV~pn?6i0^^M}sz-BuDxBpF#^1H?@BjaXgQhaEgBw`?Dm8u>M)lhKcry{#nA< zj?iGG@i-rYLfG%kaV;jzfaQ9BKqWZ>@hy)*uAn$}8hA)aw5&Mecy@U{aEx=wRd@)9 zW3e5#3n0Ng{QOvf=BL64t2+X5rA%T`3TrJp;+huM0<(PpLO-fdYgZwP9A2RSKcn;O zr@7BDz~}{N_R5TDA;|jK9zw!6dOnGVevK@A#Lh;5i{Cw&vuJK@nVsK|vCYA8K%6b= zqC12@K{Is%6)S0H*de0ntBU#UiZW#dNM@h#6@T8=tB}aN(J+k@D|jezf{23;=0YgHA*8|uEl(mQe#)z}*JO-G?Lb*hN?V>4p5 zRs?FLPT#44xb)(fkt~$coUs`)r1;qzA$Uf4swyNp=*7%#@g3Q5$rnnxp&1Ggteyvu z?jIJmMSIKSG2Q-*1}OT`&$2*E*A*s!f$nN11Zn+8(V(E_O$OG`uhe~bO5S7!Hnv(# z@Q3XyMSvh@snb$I@h-DffZ?dQG87?03nopkCG5CP$JYf~RkN@V_*9zkTxbXQ zC|J-CTsDFyM?xa)bRUm_n1d2e_?T5`4m@_!ep!x0wj`9EXg^O{zkInmh!4za${{KB zWp}O5&K{y1^n_ILjS_(v(P@AnT$C*YISeitAz#JgU{GG8URH5(KxR~{K5ls}OhO$G zZ*bQsqq%e$lHr3i;7<0;EKQ3Za~wFh*C6HN zIyo@%v}ex}>btV9tNuyPcvzyzsOC&NoHzI=SVe5dgab5i>n;x&#_}-@+fTkI`>|^4 zBfx_cKrJoWd+>m1=`G8bhjZawy1)nuRdv2CeXR7>Y4NLu96a6* z=e=NfU5Li>z4y=BaLsq(tHv?7{OiL9G(Pb8sS_Mo%jfu=RuQ!sE){TYcr)atyr+40O&BGat)TQwf`_pdGz5 z(A9ivEEp^I`DS!4AEqSwH|ZTUY_~@s|J3(uhTzXQUN@e;G2p?&E6y+HE1XI%f$PYJ z(lp7SmsG4I7s;hRf^pO$$KK`(4I`I=D({-Xabqap2_>F|=UCBxVqX0B$8{{!ZjB}0 zRB-_K+YB?6$gyUYM6!kGJIQLkVXc>gxSjH`%}1*@L&?hI#t>D|k@8jjel^zA5*!%+hEx4Vm96kjwbN@3l|d`|nd>s-Ro9 zK^wRvRlefy)=%;iypb_4m&UW@pM8sbj$nhF<4NpXhPCr6>wB!5;?aDUH?nNd6K5TWdx?vS)u8{6 z=%Yni>51Q~tmU>pqIM}KV)N!-X@mM7sT;`y=kK3`V@3J&cxk$Tz{%Hzcd39qDio0? zA;I83YJtHBkex1_QRVNu5Aa{5w_aI;2Tt4C(D4RDmYGjkJVkKc$J(;omz9Zv{RLUy zw%^10O)KW}>p)z}CkI=X?}cR}KCa~GA5SQ{UZKRd;@`tI%+kEN9sJngLVm&R&aO~! z3g0>6it#Mzasu*?9f5rqC`H3K*G@22XRrzuik$uq*UE`u`1M`ak?L7ZlID#(x?hR3 zFcX){zpPS#bp#>mOZ(606VrN+6i@AM7^GFkITEHYu&W!(<&?7O05p>M-%T&7Zq{bi z+0Z%CVX5=Y!W#>+Vm!ybDmfsUmQtX#aC}eZ7>LobYc&t7t8PnZDq!Ham0VF`ZN0ay z#RAV{#t+iso%bC@)l673<3Z6ZmNOr)Ws|6J^O8F>M(%!fT6ra-SuhL^U!In;?0;U_ zGc60pI3ms1KH!87uRL>>$O5Di)*D$MhFA3i5;e3S{c-9D5h>*W;^?WD(M4bqX0T$W zrGaA*9;at#eE}GHC7_i;6z|s%()}XeEl)gGy5&ky$kbi*g--gUX=;8sz6<@Yv;wiQ*-vDRGzD&kt-fk*ibE_~FN zQYR=${Z$%4CD1X|cy&*L9wr(RYE%t(RMF1{lZuuqJtWQ1Or=t}*R5q2lLP4V1u5EV!}DB)zLp|AGT|xzb}5)=k~3E zi|z*#F;=SIQ8>(tr%hH}szc0q$X8D9x={SW0y7v?d|lif9ZJwKn$el5vS=00@#tus z1KqZ(R6ob)Df6ez7f)*qwv=APe?MMQtC*KsS96+kI9Hd>tOd88-Dq;R7R%HF`x8ZU z-WI)1``zQGjh2=dcxHps{w`*S))Zu%aCtcuQQjo#;ndPg{&3coZ)-`IuM(F1Tv>Wy z)9kDrF7&pT{ke?&E2)`;%eH-qnqQJUSdM1}fMryjCVr~mdzsL)i~kEt<6TkO%5Ge6 z);$#8LeXIlp)jB!8oHkay1XyyiN1?bkQ{3kcIQe)Cp88Q$lx88>Fsnn)SI8q58-w_ z{tHxHRrEvzj-f4MkD)B$cY$qNyR*duRH^b9vCy%;c~TUi`vT`19l1cmZAue?47ox1 zjA{6P_0STe)K~!ZXRe!G%dRt~ET{&OSEA$z!qm%^2j*ct>zSOfx@=B$1&^y)Gn0U8>}K$XGkXP2r!}qrPF^v@UXc-?8NBi3OgUh$ zpo@*B7c$Y?)fmkY&G@AV{ZoH**Ep~nN-O9}cZ!Ar*@m-pX=45vVD zqrkg#Bagdu+^&;<<7T7zw+wrHD9gq^-2M;0Yl*(|#8(YkuxBvo$6UVXImqOo>_{SF!?9u;!fXV;T zl@Y^AoH5{|t)zdTv#TL)d=B}+Gy$IfXs3TjHjh;t&HjUK{&y$-AI!v6Vm%PrQf`5x zR^Gtleq;v(j*pnvrmW7-ah4aS41OCnM_ zj+JK%w)P+OH~aoe(ta9#H??8BME6+!>dt+fxJpbqtfH$tJ~v)ubmz!YVE`7vjC^sL zW@kN5LnEc#;cktVS2RQ;4sfp+sod2oEK6nCi>aK;AYEC$R11>O%s_!wX1rD?O+lx} z&;dRS0K`UU2>7Hhq)v5q+YgcVRSB4)7xwIFpQc0%m0u#_YAcqIQjJ-jn^!Y7LENFk zU*3I2Of6mK4%A>julkaxqR-5!?~d+ZBu@;hO+c0wH(xDqjKoy4p%U_yw^-vs+sT9h zX*?klX==#scdzfYz`CmjbCKj`jUHtFFMzQ>CP$TCr#T_RR=i3}=D0xTE6aF7`au_6 z1HMx6^mN*~7X8n}O4po`r3o&We7U4WYH&RB5!>)yrwVnpyE$EDnc;}!h#{y#uhJ0P zg@stN%9mi1tG?p3{L8T7eI;>T#l4z$!nCK5c5-zd9>d3j!pS-opZ=VrQKd(a?%2@7 zpW$SyC3srl?Yi+Ld+bO-aCcDs8eG$Z4-KIgcUI1DalqBK=jEw$1`eAiAXZHqzue_& zSzeE7;Zp_{Nn{IT51*Y7&<|93yU$M*+qVqcImKn1`km-?TN1G6f!$Ul>a7FV`Is-# z9lV4R7C2C}DHn18+O5dI*cKntuR{VOlC-I|GXsz+6e``dn3_!BtWs+57LEX~0=k0( zIX4LLaB=hxl)3V0iXC5Br{I8tXUn9XBBu&dGcs*56?iq4yR{+*rlFjhsR43xF>HNH z`_ME!5Hnpa!}I8)-$g_S-dj~C(3LTgCRhi3xb|f zvl6x>W3(%dL3~Cmq;`+r%ZkQRIs)th6fDZz+?FQhFs_opoG~xMN7r6#^iP4v$Nt*r@gQsxG7p6)Jsh<4}zfe)9j7 z7o28~P{t97J#uGE{{}#1!)r0Y51TfHqbI@^4?n$->UwOL#$Y|M_9V))lsAg*8h~sL=%A!`rykm zNIb&HR{5X4(2-@7NS0cyYQfBaGvH(o*=rfaHUz1@U!YPkdkqbKxP~QMEgg2U6X!<> zqKOmLVqJh#5t6AZheyPEfgMA(S^4=+rb(kpk*%abvy@F2mp{D41{S;!P2Tb;%<=uqrl2(1IR75~E zDb`;A0iQIV3g13A%qxsa^88NZbl6>>qgqw11D}O9U0d38)-W%*F@h689Ctz7G2cCyXH543c=&xCv^Xvy%+)D+cHY!!Uhf zytt}pzm#Pg><#7+ZZIsxOs5ztBU|aL(eD;xR-e?#tVSu&y2fzJ>86|t_+HpeTN64n zM5Wp<7D{9zT&-cumc`mE40bIHVvddLnPi*}5@~EIBaeIS`gF#Ha}1wM5$}xdba^2n zeL(X5rjo-C3|acHJ%2n8fqA-SLBb2AK2#XKeB)?PWG7eRS56i$=6dI0RFq^??)#YknWoaHcnqO&@7}Lq+1Q_f~|0QZLfQkZ6m5Kz!lJaIP<`ZBp-c zEITblKE+6OtaqhFxcI9ktHd{;lUG`5NW~c-Vd`RlbVD5I7V&)qo{w1<677#mFIM96 z6bFRog4M}^W8JnaTVpF$N42qz!d~kZKm{}CvJ1L$J4Wxh@g$?ecas+iqVI}ug>0OM zOU0d@fd~KW!SuU}#r4@)wZ_RG?V>&Cw;&}~HVvD#?D+lZPljZ8CbBu=7(f`oZo;2? znSv*a9BG0D=B{B%yPGkig+p^du912%dQ{DoSolPldx(o^G5_z4JgR-$5!AXLg5X|< z;s>r-sO-E5#;zHbXbBdy;mtnwc|&@Hodog1E@wx92C(8>%&IR3zTy?MApvvPR)w>Q zeQKwDssOdjeZ6jZ8MT18u^-`gsVu;NEQ zV%{w0V(s{*7#o8UU+YKMviH&bItD8?W7pY9Q~9N?N8`$4EW9|d9R_m0u#PLEKl-!x z?ZULOe;Ub$Y7N0RNovW46Z9bO!AcvpMAVLK&DAr>63jFyM%IP0rM`61t9`L?=frNK~2g4v8@v5^`+7Xj}gTGIiO3S0hI$goo z`>hqQFyVR))ENB1F(6S3tqgLQW$26iAP06C(*OkVsHz{xLu9f~zb&269a+{sv+~2@ zNSZd`8E)IvabRDrtWki$TSST)j8IWSDI;rDvn?cUa*iRORTxDX%3RZd8=G1l>P`c6 z7WDMYawhPMX z4(zm25paZ`^hy-L54$xih3AItT=5|ir>vyvALQ{XGQNuu_n2mcI++>uSYn{!X*{c> zETXSQ^f`KXt5{VV3WDNeB$W5Gc7&uY{N0vG$)T@vfn>`?sJ_^SjbPTh%BmPWGb&a? z+u2J~%ct2iOBp6ndd=im`Y0Z)a=-qB{E7{g2$brnkc7sB@iGd!RhcwRDJ#v27HK$+ zl^E)RWC!L}zKE%Z|q8E3-QjY5k2Wp%>MYY@+ZDH1^k zctr?oJ)1bJfrqU(pZ;dSZiBaNm3lrB6C;ePkgwVKe0vwA&kdzsBi`x3x;_e$@muX& z8pTWX>;NxGYwjRmeu$T# zbk2|_p|8n$OvMwb!@MAe_QMCF`8s1(SJQdKWTCA^T9tOeB%s+6cxYrPQ>dH%UJyr|kf*C) z1}qVeI{v0hDaiMI!-KF=gztvre@YYmFKO&wHtGL;#_4}{#ll89oiqYZ%KA@2Km*IX zFM2*Yq$bS#V@p!hbJ&?Zi%32?+?bX#o~z#D3Zz0QAPifnO<}v6AAgo zSaQgJn6hIqlSZh*KIrk2xD3Xw4|;5okr)oM$tZ8nTY8O!q~t(*{XomI$&|3qwi_sp z?%$X*p+9(@EKP$**ggJ^kf)?&*kIy79`i#$=+m3{z3IRD=g1JxVorhG0j#vPX29wV z`Xv5HESBLLu`N9)-XUfST>0)psw(=IXw8jn*!5O<+2b&s5d?0sI^+4`?+*fh0D9s3 ztIg0ydT%$3Oi`%+lHy;B@t`^*P`pd1m+lMadA&Upt_4i-fzUKf_2D)$FXgu^m;s2puzqB}+i<{QvBEwu#9SJy&E zOlpTnJo1Z6;bUWAnOHP48Lm!^{diA-81YQMl(R1Kt1yF_+iW#mdBO?|K{G=361 zS5*)9b);g&c38QTiLy3M(I-9E8I-ZKXKh|rKMp7BHHZTrdN&pAn`)p>w-KDG@=>o> zxzKtxnd>U}?UYeGr+(tDDKNog*dj>IMC>dxJS^F;Zfpt6YDD!w`M1ARL+cR!x|n2M zjY1tqe94FZ1r*hQ>U>gg(WSwGzIiWh{XN)W=@84P3mm3U;-z?C5x9xsgI)pgbY&X&`~|1 z5S?8DuEfXTN6dM!!_UwyylWT=b{pdfRd{Y5OthX5uyK7W5`&HaH3Zp68OQ6sXXG1q zwQ`8HHApn-@8?Ak90Q)o*~Jsn(Ztl6k>RJIP|>F+wxun=@J37nIQNy9FAM-$67bTa zo~UdYZUfgiA}p@qq{M8IqchPV%`}r{wQGp33f;m1VXNlhky9M9C(pc!p5}OM&ntrT zmhSo5k0k!@mFN!y$dCd|gdt za*i@RRB}!rdDVizBlEo^ZVLO9W(0(2eha$JV`hyucn*@Zl|nu1Fc)PE`&~n86p`iy zfiI{WRyR^9V+U29B){VKU#dWVAt}()*rOnuojsk)uAwa0kzoj6<8;#Tq@Z%uwV&2t zqRQ=mu5c2XN*{GZylM@wQr<0g_64f$rg4{W4+>Q!397eDjos99er_#Fype zN@QAN>oC@R_1#!B8cE*>Z~Ex1 z>eL2_UAeHJMsZ3fj%=mZ5Up?_<4DODAlZS}c~>GCs02(cHEIv)mI!$a!p3*`R{xRyM}Zy>1Y^5qj-_*YHY>M%ozcu@Jd=wxDLCCa2l*^tuwUkV{Mwvzwh!x_(#8!;Xmab7&?3G+dgor~j9Ds0fID|`; zG8ri{8BqjhN~_P>?dXm}CTf)X;TjBi-?X2#qyy*FUr_CE(?0%K{pf{B zmW=^;0l|pid+9RG_GzK!f*9mywkID7VefJbzA;AeA@)e&to|(xJ<)SGOhHH@AX|ss z$)E(J;m+U{0YaZxgjBR!HFjBd>|-Cj`as`Uz+h*#}0fT?DUYh%f3Tr8~NP5qP zU2FaqsBN6u1%1VN#qV`5Fy<;@yotYefEHb{9Y*9Z6Z6-c9d^$eH$kDe_w^OL3rQ^* zZ9dKoWgaaPUYfdW})pX{%-F#jo+dd8|bquL1 ze=M0yEuZkJ)1PB+&G&%lVs7^6=|zozRGZJ+XIQVr1YIq*hwRmMp9qF_LoK?4?4f$9 zNqL8<*FWZR$v1IguGr^viX^@fS<+`gqH_W9N;!%Ws$n?){S2TUS-vkT}^&*kVlWz5Cx-d+Vqu z-}m2F0YOOxq(f168X(knS2lMBoEMsI;^=AT8Y;L#K3igERvJ?0Y`nvw!ED zefC;=uf5J6u7$ub&vQR_T-W=0y{}0KQ*0!CjH)vv&;|88t_<%jNAy;=Y%qUce&aL| zCq1)FsETj5+g|yhV$;FjejZP_UrO8YJ&8Syo!b-GL^dV~QBL^70-d3U5%0^jpOEXY zen`BJ7TYeE%#`?xZj3OFDk5{xh|61>hjQHQX9J138w~lu@+!U&mn5Ub>baRyaOrl0 zk~t1pN_d>`O2_oK!5?iqm|A*PYNLT2g$hsQdWOs$80c7XSh7CY;WhP`(OKv_uqqn< z3o>XE3769gTS8Kx74jj$%;RHI9}T~>3Z7l#R*XKi=G-JD>$cu;oa@qe4alOC)a?Iu zI9qAQYPX1`GC>m{p{Yq}&3UEP_RE zWtQ}<|I^`E#=sw8CQL=^=d^=el7@J+y2r1uF}fbd&GZP$ z^6;-~Fh%mO-9T(5f6*KC^JT8YEW+J3)z&HfabLy&@E5 z<4XK#nF8y|B0kr{@lr0sj0iTY=+rv zMG#S$5SLhp@dcv!u#Z-Ks3qQD8#jpZM#lHZ_~! zFml+7;L;I)A*#f^H@-yTn5K$-A9~H0-}fxnENkf3I!%p^YSpGM-~6m2VAWn2b2SBw zNxymo(`zd6$qMx+(H}nG=23MD*%{|c1*ERmsad(#4hAU6u9I@3SA69e(zf2z2ysFLSj&JFEsPJgt48W}9%P7v8uk^=%YQ6}JA!hzSCgQv_0$e&`KAJ|eu~Yu zI1WiLq^5A}2`{ozuw*i{>rWoG>#cmf$V8<^{~<8{pUKLnXa6TKXWJna?VxG~4k-FR zHzND5vgd!2od5Zsj9v^k;T_yO!I1j6>EoTQ}5kt*2g>!;K%U)j~#Z?C+8 zTVF?~HT-SsJ3TwguC&_u!#wA)>EQ0+VQhbfk`3Cfm$LmEw!RsyJc?WnXUy10BoJ@w z2q&t!t+TVSwcW6m4E#q&rxCxURVEBE+kDN4Pb1c?ty8>q+?Vj%|61jC`&#lxbx8@w zP@=JK2<^?KHJ_lM%gxy&PgZ@3JgwiS-1Go^JNEYWcF0{uVE@jzonC|Y^GQRu2h&Ok zfyf1dsU~x4qX2{IM))FfUvgBEs~aUC{0PCBsyR{)_?sR0JhsQs{^`G!{G|17QJGXC z?n#LzdYzjRew-OKn=1Dl8;(T2^}MXV*jw$Q#BR7;VYQJzIlNsXV0{9Wg_0Z(NnSpJ zN7Ljs78QM4%p1$~Ij`n)-eng&ZXrFC-yQa{b8=d3yzu-ov^ia~?Qp)g(3gRnm3%+) zcpH79_^TQ^1v5}u1SD-O{vvgK>`A}oa&u}6{bs+K@-0XcWw+;8(vn=_o?QQya z1tWX@|6J?ZHxD&1Sg*xsHuG6^(75>clmt@NH&TkRU`)i=dy>vy;#m{N#>d}2#sJSI zR)HR|A=o6XGg*_5R7n+jTdKBJXICO+r_2y*Da6}qP6X*=p_FnEx^f?=!JPQ7JaKO=YGf?v6QX2vuu>?xeR!Db-l|B~(flDK*pOo= zCh*EFG%T#(#LWo#>{;vpnsevVzGO)!{OfbtHJunSxyKka#i(*&(_!qJ4g~Th0|vCf z+e=McTwJa7T$Cc!vh?hpW{%Rv#od4x85!A9nB*<#aV_%y9b=d&RK`BindDgKJEM4D(;4pkJp?Yp_ zut2@<9y>cbkmL5N7u)=1z5YtxZZ4MEPiwf=ip?&}Mju{pQD9{il*jrVG{u^TACu*( zo^ko~zKo_3?gE_8NOTuPdvAQ7-d&em)7_AyS?953$Eu6x-c%1rGLs}6K4=G&>PD*0 zxiJRb#oYCqAjj{_w!g`O5k(1eY6<~33aE!U*h0UX37%N4ZWssy#1dJ`h51Z`NnY1gbk?cbTk24)(XY1~TPZt=#9T}hk1!E~mGm)7^UVBld` z2XHb?;l+n=7u}{ko&?VNLer~+1QH3Cp)_5}u2+LqTD)!>xK@LyE-J?lP?*od+Mm>M zJPLW`BH-*37BaZHs1JLcN`(56kk?u<^Zy@0-~WbL0d;5p3%uyUjP%v7&gd(_t6vUZ z65NCwhf>>SFnz{ps_~9BH+8GZ;}!XTiT;|Y@GzkqUxxI06t7oWzcC+jHrh@SH!wcT z#ozpv7}4FC&Y#PaTon|>BBU5lwUFRY^s`&bL!O<)PAX6RCYzx|LBYUDGn+t<;;i(a zgo^j^;xblQ4Zg|zguUBzYue*u31vFtaJj^RggsmLTH<{7Ie~uBvTsl4XFkN1ZVKU# zM=_50*S(Y6T)-Mk&q)PJ*r(lQgCF+wRoGPlNd;wP1Sd3#G*n(vSM~C|YG{M(gwI zTsqC=Ol?9%HPQ40cLBO`7x6}gL4A5A0;h426E#?7c3Y=Wt5-$4*wBjNC|X&yO92XffY{Z7@6RWZKR1FOuyXKOYvfzzK0Y?*UlyF zt8dLrCkVgYsPu`LBXYU~*!bW?zcd0@>3kCqByhiH6>?zC0R8TR0Lz8uO!U1S^0=u%N!z8^;lXReIR71vmJBg*{j zAzEZ*$GrE{>ASC|D}0@!sN~MOZcgQUTuPg^qes1gVjHC`qmECG*Q~^}2=*yzO|hGPZRD7LdzV%yDtDGe`Bb;FM9m_T{`*XFPdPOcJk#s&b(et<|5J ztPz$+Le^9lajvBzzPQqztmePzLg|7Iv4n~>^PFr-9AW9pjqT*|84n1bT>K!2?zK1( zDE$0ib|Nhg@8#@veOejr(dT%gE>q9ZG+X|7Y&@3tfkiw0u6mO_U7^9PAVaPzS@%i- zeLcnNx!Hs!kLEfdMNtrM_fNL5tCoNIpK(zMIsX$KEucRu^3dN}@jZAxbSJKHI<6XM zg=duAf0)*v4B8=o7mw)6#9L4pWR65W`_tS-80T&<`ROydysoMp^hvN|t@wO|l6_Xt z?bDD?mYcifxc!lp z6f^w9&zwZCsZ^QXrK zp4S~IN)zqM^!=lKDcQ2)r))mkAsJ@b=S(ZJTb{=i(A@cN{nGvxS#e%U@L>hbhiI+= zje~4UAC!Tj>s+P#)8>aIgJELLs#zhuX5_G5UfQ?xux!4jBj)d4Z+{X~3Hwr+XC$Z2dZ5p+*PIh&aM+vH0`!2eYZDZZ}?%h4o=~b#li|tyv&)jbZ;@MmTgGoL(a*P z#G<;y<>6{JXuFzxPi}fb@ge=;@l6TvsDHxoOldKLh1+!tSXb*8y&>>Cr9n2?h)yvO zI9T+qg};pLQQw}6=y#rrjtKC3vVQaa4Tfc;IwiZ~=XZRkx_!}2rD}WvA~FxSjj&@3 zprs>%d?C^Wzb%3)@lr#+NfycN4F8ia9L%rv!BlxWqX;`!B*)!Qc8yOV-GRx&Vp{4! zR4TTbzBYqp-SW3Yk+9p`{27>-pm2)7;M7*UTb1KG2@&PWTRW#7%kV0?X}n1}x(I&P zGy%-nC5HS8Y|3;u$~Sxo-hY&{bCO&rA3F`JOgTT(njjpqdTYT03)G{MPfUOiv#fvI zUBbMtj9~lvbR57@Sk~2QEzD~#7?VZPKYxbukT?n9Fy!N7$9uMpdw0Q4%AZ(bQIW3u zWH4cnu!mSvq~B}(FGZkuK)QQ?mq+Y=OpcyvWiaxG#eKGO1i$z#RLfzUGAEOiTE zixIF1bxOB;mN}BCdn&&g9gFIAXCkNG?W4ys|4gQ}HjJ!=f* zpbBt~1S+MooH}cHT3j_1j0!CfxT=1+X|R#}hpZXkvho(6*w{VRV2SofMEeeL{zoZ5 z_4Bx{n0UIoJ-Ke5+Oh+-RD}ayCrPX`0CDcydurNF=(F+$sTe&HiCR1nXbnGuy_wmv zz?>JLbs8;t^@^(kfA?ZyJ;c>nBQbkLlN&*VAzmUik30HlHgeX3vG=Wp(5XmgyE+g1 zLdVk%tND-~T$df|z_+&@riOOH%L&qh6FHg9y=JF=W z8AB{({2*e!GJz!Z&z1xghf}3|+}M?r?HkBwr`=lJl0=dsZ}t5uwk*CMl-zQMC!cg5 zF1)rHXg?clsPvBA7=c`Sy%IeYKjE~fb}D46*LF8$XRlsR9UJ%36!VYNl)Pi@|NCm* z6{;c#-s&!NQaog@YLeXeS|~0d=3eTvSCs8bb5Hpe&pp%)jLMLSv>KuW z)6kf&i#I|OL*uidldsKg6V;ALu;nK-#VSNb1?G+tpJaFlP7pKE_>iQC>N&;Cv{DBW zshrsN|22(}Pv@MLi|W^_&UvJ$sle|t0qi;ljQni=dm_NN6>SJP?Oy~R9`5F9+37cFTH)-*{&KS zX}E}$im}iksuu2u)HGn;3;gH1+T#r4pMj>dsXqnW?Tp<` zH#kZzH30~=iPx^vIwRX0p^LuBt&=oGPK@Sn*lIpi`89=)hPGu{KMKX?W#;;Yj$d1L z5C`xrB9&`tWb8GW?^)Os*aXDcMaJd&#P4X*KCDaA;rEiY>(VY-{4?{BY|3ywCF^4; z`430wb*7-o(1whx_s3_pRGP_Alm;Euh=2Kp#rL z<^*(^#_J^agz}WXW`}+DQ|Tpcv3gMzGxPOWAIdNMtKx90zn>{N;H}k7r0vhNmMIAO ztQzbK7rnUki^PPss04a)>tXU%CdR?F7F_vmcfi~5H^!WWy|9=W)i7c{*X%cSyUE064PtF92k_CpUE!6+Su@w-z@>Mn2eV&vKwS7cs)w5Zb}^zXGw)(0wL zJ2WNFnwOF-hlg2He)(5jrtBhV?Fl~~RVBS3+sVslH3;s(Rr8eo)c>kN$&Ra5LmWNh zeI^#~l+I?RZnJJ}?F%xe4X;%y%0_F#@+pYXa#wL74Fyf}QOF>Qa$p6+=FCHiVq2bGj6 zc_i>v`F_-n>NW8zbP;ET_vSjd4-}M(V2Lt?Exh<~{{{TduS0$k6HV2p$%*-6Vfnp* z?$aN7$;TNsza&aeYVp>kFCS5)jmt`9C(zrSd1KDYFrE&8DX5&du5NMwl0is z9a`^_?oiDz@6=sM%T8)eZ%KGf2-s=`?AZTuF(F47$j+!1os4A?6i`t9V?TsbU!f_t z@E@Cba{)w1^`a|Hy9q4<2+>S{I;$aHjc|j@R;fOM&F#l0+E;DEPA;rX%gnfVKG#u zXWu>6a6y>^NG~i8*buwPa#~csVr|kYsVhl5tnmvqII(xTFXf(hPzPlB(teXoZ*5?vjVa%@Hq`I6;VtO z5i^|yoj!ZG`HAfzHqds~8mNfl=rTBe?^N;w;})ekJHjwpGgl>B;bI=#sUl~if`I|6 zE*TYtmA6nZ%T37$Vus%wMv<${!lq~vC^;l~N0+CC9k+6tH@0>XqM+An1DmRI5FKD2 z=rDJoxg9rGN)@^}ZXbubPk7t?QKc53hURpbkNq00-&;L$eYPC8Mq{pZO_A43c|V(J_O`=MME zu>)2-7<4n$QPgFG0XIPJc2ljvafjj102V z;Fz{MNt@Cvz%r z>E7M0(=GRkExDqO4r7l6+Tw++LT(Q!wotL6^`_AG@1snxH@TV^LBfjScrA$CWwYuA zz>4u&{CUE`KIjx4#wG9s3d#alz?%mruOyYZZ_Gv_$Ny1REczX`f=c`J;AC%vl7U1C z@zKbpd1>eqY`X&56LxDN5#mkbq2ZCMC12E<#>h%P@r{6^1#x>EUULQAZ|j!&gJ{8s z#~t);3gv}W>PB);sh6YMNh2!B%oV;8@bCEL?M?j2wNs1vou0am6y8D!Opiam8D#x5 zx-ij|E8!zZy(+>22gB~Q;KK?m60q9Za8>_f$L}fMSvJS=h%*{CIdYVeBPZ&X5qX-q zT0P&nvg%!oV;R4464z`Vh`wPUj6ZSMFM{mEdht4HA?_t`=qU*#vWkbSIp26p4o^=9 zt=0jhQjAjz{#2*%*@jO=T4}nbje~=@llY$r&3~`w$zY!pfc%!z>kog4kU%?Y5IK}A zi-%3S=lLgjTHizu8}?I&63Hc-b_;ED$LIED^$m7=v3}c(eCl0PU@orvV7Y#MYOBc_ zSfU%?vwm1UeiFR%pF8zktM*0>-2b|7$G;cyKRWHm+Pg(_LkK$P?Oy@&CMg!8vcpYI z>+HG9Bc^vo6rIGM34o1LV#4svq<-kg#gOjAv@S;qc<@;NHV`4p*5z2^lTKAx9+gJ* z3i-?(S@X0F{`6mPPJ+a+t)4z4hJGazQuwtt8SGwQlAyNVW%D4VH=h;%!`J=yD{l*f zD$PBR5+axbKE3A=S7A5~+kt1>6hLUtmvzwE27oN#`Pz_l#q zO9fUKysD6t)a4^^`#=2FV;8kz7&A=DtDeFcB6@xtlX(=$c)eEg)Fnv&s=AD~q*V+( zdc7YMU9~?`|C#bU<<=B2mUwqU{kuxe8g|$#*IlS+t(Lv%`NUQ_MFieZnE%%5Lq2hu zj(3BcwR&Ck6Zp=Row8`0Wi*Grk+8kH=m-<_<}0lfBA3Eahe)JgzKLMj^Fhd-VORMt zU;Q7~hG`OXy-zJ=Dn)FyCMa&?r>iO%en?oyl74M=aGrng3Xt8Q?>LH8)DOu%W)s4k zu$6I(G+v+i!Wu?%84hxWyQHENtV=uG(TcR*=7be!WPUg<10K4#MeFS?jA9j#Y1wG= z(8JVOq~dIu316&hb31D=!TNsu^{16*jf+m~Em2b;oXfc?V-`e`Cg2tk>Y{y+$0{Ox z;o-HyR6;Lpjk(^z3eyrH_xIDGiR-28RYJ>A$)S_j@x#?BQ@C3fP_v|F4jFw^sO{mC zwUTX7N1t37>6rWXP_8OVvFg4^VXntcUx{3$rk-^^!_)^nq3qrtM44kx*1go8&N{0* zQYaM`BZa_q8KcG9M18SUcVyDEjT#$`&Ypf#x_xdif<8*K0hbDXcZkm=N zlcun?4~Qex^K(~MD%>-vs&kMeX^!|Y=q%~4sw2_0=#vkz-s6dk8~V@}9gqIR>~*OwQDIy-Po;B{6p?&*a%0j9hzog;&${@{PDM6 z76z7cWa?p3KJ;nKAqo|l=*`7x&a0V?-)y^v^91adCaX2gw0yLu!orijbAOm?cVIa? zp-5Ii)Ba$-4jg>%eo(Qk!_=ABu%9Ys6P}&no=J?Vh>S$I%+(zk!N0TY|5$xHH{p_L zcg#aS`zlL|iME7X@}V;|srE$L=u%u49$Y4OwsheaHyTu>a(uS+!7IS_894rV#&wE^ zJ3K%B#M68E1zeZb9QwqXO+i?Q#aKb--luLcVj6{7l;j2J*b}ioOp4Bq>zbkKy27)l zvw4cn7R3JEp@`@)m=NwScytYH)I>uxU{XUQz`n?WgAugc{nfmpvT}HClms7J*ZvER zQ|OsqNOYuYDTc1W%Ngh-AUPi%13#Ke*U>9@J12u`JGoSksZgv^NO7@swxe_fjo!eD)A5$qSOQ{!MRjuVaq=KU&%#|>^*NKk) zM}zaTYANQDt*vO+wv>-&ZjaZ(?U@)!M3^VuhhmX$?Piw*egx%-C7awoN!V%j(mvew zr5}6nWrtoB?Hquh&}^(`J~F zs`JXkPerIy*z9x7LgjAW`sDp4xb%7G`Z@|r$harDLRXS9L6RjiqngbjNNiJW;+ z=LI_GM^Bk3c|c~z-PP^=RO)>jj1K;_D75mkd6cx>$bb!-=}XZ_U?m^zCXC?P8s;LU1v(TbC#bP0VXAlHaTqRhj!g0u)d$Kg!n!`!c|t@&R#j4OSUJ&}gzUkWaY~pA;%|*h^6ZaJBPQ4DANNaV+CeVyOUD8$uWYDc&tWohXw^nMRJ2!RHyNU zrMHmG2=2cRSowj_h=dwbBd z>sef5_5dDDyO|ZX8)Fgyp3v?@bE{oRk(_N5T}6Sr$N;czyw}b^1BH6zsdcl(ZG-Tf z`|8;}`H{9%CUk}qG5TEU#FXtF!wfyfpCXSFWBwi& zl<@jr@wwJgO-R#y1qPL~hT|PO`^BbMyW(2xhmD9dQLmBF(f)|_#8oVb`Bk|5U}zWU z%96TPyP3XuHogn0*DN`F<%?yOltW_IVi`C6xmz@goy|z(a{))+lv$_xYw1Nv*E`(9O# z!)XKJ$a!;g7>E+lqPkF(?%%HKu5lW~II^h0XHeP#tMhA*RcY5Zm0T2pV;r!~FVKh( zh-HitDgwEl9BZe?q;b?ET!(#!L_@8z=H`st44-s2dh$RKZ0^3Mlh$oLmHkf@1pZx^?qf<>aLESk&av-x3;2fHbk0 zc#=!rO@{egB`+SImG~n*-6@5GojdGx4U(s+9-5W4+&i)_>bX+Kp;KrWlua#hvaR|} zDby4Ra3jLS3q)^X^FtC55s`o3EAbgMy_+Yvcm(A(%V;8^@R7N>j?a(g6H|lDqMp;J z4lgXw-2T$pzBF)Z?n|96PXf$H6Ybx4&cLrnMrju1dQBIqk``d3|LHVCxrPiq))g=@ zF@3gSIz6Pv_S0oigM%*M2WfyrK%o)m)S}G9*ol84hx8Tg6nVi2#hWK9g|Zt|xtxvb z3{Olb@Wij}n%oc?rL79No|4`D1?U98Up%aoGP(dxGu3F#si^Qo@Z(snFWKaD>mTOW zBe59pjJ_zq2D9BsbvV`i&E{(G9qZ2+?g6%_1BbJz4ZuIBUn%q4$28VEqd-0NsY*A& zi#a!}M5C(D2M0$DCkIvnPSd@`M)kFu2VYm6nol^e2&kKWQpL%c4}f+oN!k(p#m42) zIU5X3SMgYHU>eB1O@ifX*{1VxtkPFNXHZst(fpkX<9>TG?pUsBc0oa`7Ecf8?Z;XB zrl@ksha)X*6<{;>+A;=fkY)7oe3EyaGHiNfUjSVa43^Ht?RHq9u8Z)IZYpYdr8w0E znT=TY#=RxRmi0WC34Zro)qjUZ1n%LyclqdDk#E}a^7HR0DV#P4VC#|~)&Myx;*@c^ z!H0EG@^ZDeq$gd-B_ftl_2`Bc`SaK=n*eeYU}ZOeM7VJWwYpFhH{Vi_aHI|ur`5Ci zVFBU=i-5*zDBa(^qIzUfvW4-mHnyIlls^3tQJv2c^a7waVE=zr)BFQ$&|qdA3kF_@ zN62QJp9`RfDA3o2^&Ok}@mhHQcVYC!3m?R~c0=8c2R^k(8#=+<(9Zbo*4|E`kl+0L zy#4$YO|9YWH&?X;Hsg-A2PeWF`MIM9)Am5R@$=q4t86GeQZ7qo1C4Ub4;qBQ0bP6k zy}-uKVI2T=$a4fK;t%72*>2T-{H|)MSWo?-V-~n3dj>^#4Sv%}Q3>}Eq5g{PAI4s= zh0+AB*ygCDY3Th(7Aj3)Ezx}|VFJh(ZrhdD_eQsg2b7ifrpsd>978|fzJRBUDuYfX z$7VVg{v$Sp%x-nLVSvnwrYvqw0207Gtu6`}F<4H6DDWAh@8h;+~@Ji6RvHN}3m zDlL7%*s<=&SK?w?)!*itT>=+a^-v&{EZ_eSkz-p$h$&{}9UD$41|sp)z^;ZKp+ zM1MMe?6Zfu&89Cnn;Rn1>d%3DPtbX(MQUbt)5SdL64!y-) z`L;jnMVNF?oaNik_?2&S1M*V`*-kA9e=!@JTg7O+mjb{t>zBMciSgOoA29Tq9|t{& zM0++*kYg8t9W^f0{Yl(ucuoy(OSgd9mCS7}Vsg`qZdmI2z~BD{c_RtQ&@uK;!)iW7 zK#j&vM)B0Pi7df{9{@bzWwzuchokL_)zj^D<=*0geRN}nX@W4@(bP_=MB~;^IDVGO*k%eiNO= zJJ&fASs~6Erz?sjTwa5Py#e$?C;43zMf`bM5r9l{Lv}o>a`fk%vncfFbYxL~@5e#! z6A092$WJC%l7K%8YS++Z>pHefJX#wY(qJQg=Cc9piY?ZF?^4Q;z=IL9>Tp<(+ZFU! zm66u#lfL52awK6lYytcJy(B>={NP|2GV@`5(1mI}QHQ&@JUE^;q13gLCr$&Hox%=| zR=0QeOA5I!&IpDVCKTwNG*4+?FV#JtOLXt-U5`B6`2nj90lOATq#ea2uom*z;Y+qp zXhs$^FL(54euNdcQGp9UkqRJ1<90N}Dz_f`(cCQQ{+Lsp(UEULf1=1Q7~Ckg+s0|# zNsk5LkOw&x6oeC(AEr0 z>8Zb64DZ@cNOIG#pbn*+XKd%dN_e z2CBDcB-1T;dcY9`J-m*mbVAG=uY=ur84F;m1Y*vTKsa8hoSgWglw;#0c@bpIW?F=I zcfWWSb)*Z}Pmwtej(w*V^>P`H*ZEBOao4d8M_fw6n%)U59e2T_P;*4FiV_GZY|WXCGEV-o`N_AIfP?jc&!DQw7X=Z~%D-drbj^`dK! z2xIm&#%EO_2N0GSIM!x;KrFWe$?VNGXIS=en74H}8VC41C1P|hx7zmwu|Je#(7G?d zK^qS3qyueA>ZY`jujV7FMskuwFt{mPCL%B7bC@zy;KYDGzX-oj@W4k&Zb*C z-sDkV7>yLGvZ5W1$#richzjhd>+qVl%FPfwaoFupYH;9tnSxUyjb4%D=)^=!NsI*j z!G-_%m`4n*G0RVlxB9dCtctwVb5zBLw*!j-1izJ1MB>45*u-bk&mxcsG?s+(*;ey zRk_Kr$=$3;P$k%__}L7(VgNyYe6?!_a99prt4Q1mFzB&w7{~;RgDIUF(oK-N?Z}I} z+sVtOp*i7l6!p#F$v*_0k+{z#1}^`J^}<}Owk`O$wl)x-=$1mrGp^R=k!y_2OU+1x ziCNS#ZwBHeC`&BIX4F74kQG;#Fbb(WYP);Bepg96mOS(G4Yv>fu}edT|QJO04=lAoK z1e~5z5r1kK7UX*6rGs@qe=ZcyCBRJL&y$QhFrfSt9VF3UfWC1OZ`n8%d^QdX6>$tr!oISy~J}*jT)tp+L&&T2CyQ9gwi0T0D@E zsion^+?;ZBPjX92GEhMhby#unU~fN6jma5#`3SOTjl3+5py8AS6tCj$;tSK&+uQrV z!44uku-gGZ`7s7AJ|19Rb>55J%YPO6fZYE{$&uqqQ>;rD^QxT8 zyi_5CQ~Vbs)K;q}N&{xT?yunc=i+bK-{&mK-mgpx%2_vcge7;bnOGJTVp8?mCY5y3 z_sdCsFI#Wdu+vt*$cRr|B@-19Rp3-Bx}q_*Dk#&5W*8X>b?t~j)$AmU4c)OUGbQ^> zkcpey+XE}P=DPAveu_I213WkT?`S5~KQOjv^S3#8(dgS2+q{l074%P8jY!aS)UOnhzt*k301QGB{rrYG}Qx2*Oak*>xn++}w0 zCh)DNQJrc&s=C&Oa2}y1HfL)TCs)a!=^EI zd?Z=ko)yfKiU$O#elzrw`xUIH>r7-IotFw4tw$=}fhIxfyFANB$2w4s#tTU?NA*Yu zTKru!+oD$ByTSY|-shfwF21{e(3;8T&vkt+f6EN}t&kPh#RAp9EVzf)8z=eH23;K2(aFvH2jsFV7Fd%Zp!)ge2VI ztdspyg!s&bZ!Ujxys~A&`0GYkPIM=!=&f0SVBb4|foNoTyejXG=z9eZw!8CSW*Bdk zYrnqcwBf(^K`Y2n7yP60N8^hS?VUNno&-TS!w?) z?+X5EG7B2AusD2^CD*zn!?S^oQb46@DGKmdoL^yWdE-)&xvSmc3ie3Xyq(x_jxF?P z7ia2dS1w~PbwT@`2fo4X@U0T2ToyU=l2!FD>gH(WIj#y0qDpab*SLaeony!gj#c7t zPLf;@POLHH|2EE)ZyZ+#Yg zk7I=PfDl#vBWROtz6RC|P@&CMV=~S}M(oX3XBa*Ylsd+NWB`ZtmjNqDjYd?ub-18d z>TP=ZZ^QdULhwlcZHq7UYyHO|=!Ua$4MK~|KUgMA;A^b=#co;0!O#9GDvHt0`@Q9; zFh&*LmNm?9_oURl7eZJ=HL!;ozaWDA?w{1_`l9~QXT@;t@{ZUZ3t^8dKF|?_R*2J% z9mpKCHg|Fo8H|a2vgwp4MYEa9&rl9*XZ;}kAg7?nA5jj~%vI$TL$-SS+Y%!Y&D<=a zX}@t_?09!^cx+5jByA;#a}NHE9y%!63^bmT*o@mxSTr>mu+6Wk|1Y5}Ps9t9kee=U zXkGdS1f9V@V=n53qb`PY?;SmmzXQJp$|U1FFs@VP)Ax?X|MU@vc5EGOH^wdkKC!;z zXm;);McoQ_H+T-X`1r@eGR;BO|f9l|E2YKj|$2TfK?IsonYBynK@s z#+nj{2cnv9t^-$ka?@eWftfpo9Eq!d0O(3!pY68bn9~#&Z)_Ah{hJN+ydcS|_C@oV ziag|wPK*l(xo85B%ri4Hm+c@i0J;?@W#5GcwYK8SqNdF!uCAJ`CvoUl1l&S=9sU>o z6mct6vyReP&hr<|Zv`Ksr9*b~D&B#7BW;qiT0DHNti%4>J7w6Qlk)O2(G2y%y3_3>Xd zTU^2wfZ>V~CZPMnt_X0ZMcg*s54hrN#$c;8Ods+;Hzr|Ax@bBv2H_=816y@ykaRH; z=N&%rPCYBKAPULQ%=OJr{Q`)QqnTasx!%Dh7UTKjq*{!iQR+$V-9ZdcoW`fH+39P=}-dF&+6(#AQTRdkB8G@ z%=u658wMZ<(*v%m#SnjZ+3F$8`%ly(<)}mhJ}n|QY>OLQ>9^e@K#(4IcMk~Iy8V78 zmV8}W!i+cQ=%^>b9k^gvCj$T4V?jnk!;shqEJKpNRSYMAx9bR`RL8TMCLp*!i7N3Y zFM0~v!h#4%7?to9ua*H53YbXSJ3Gkk86{NlS>gj2IeL;4-3pug$;+lQqB9^9`B7kp zN?@`pVId$hI_l~YT)fca0TaW5hx}cMUf=i1T_Mjsj9kSO$CAd4d;+bF)*vZh@Y~+s zHJ`282TAKE5buwGT7R0?!g-K~#;Je6&DLt6LGxEp$L5d}$A;*f9EOG2rr@UAfZJ8C zTWS!ESoW-hASWg76r-uc8UFnMjK87-@&}nO2_HE&ZG(@h_rE?z1yCSSI4d-)MYZY~ zof%cCW4>uRP7}Aoyo28zW&G{}L18~Z;3=AA75&r`3t09GJ-tagOQri#o1$>-TaZ?6*)z*#g@ z`(t(K>+64){5kRO7E;V{!doc zbHGIa#orR>#=7RV9~@U^7m*YfbN*OEH|Mg(knN{vl1o(vP9PiVp|y(r_cW5-{L#Ea z(`OB9^6^DZeAi;pOT2Jq2;QvgSfz#B zJ$jX;_TI*Z%p7lBKBi)#qN*x0ZUsb?xcIn0U`^u6qTGC8Pl*bfYRDoV{fE@TFy$k? zk##^#^k)w%|2Md>&)jgIW-NNHP@GFYpEj&l%+9C(l=wUk?EZU`D64%-LMbd->7dis zY2Oz^ne8yC4?V=1I=Si@fvTO45)?)k%dnd%O1~Ji5G0KStXC+H&lOfVMi&~1?Bx}H zNdES)!eAiACNP0GsC-lDV!FhXtPzS1(pVDto>V|SNU}xSYZ{5z!f}0+Rhd)CETx%$ zl_oMV1D#2r6_m4|Y$ZU8PTMoJ5%TMq`xCFh2a8qO+G#03(0iBCFDpgTRKve#A2(6Q zwUB{#UBi|zFXW&#fGiFRCdt|vxl(ZAPe`|7U<73aGRYg;uNCS_{?X=H)|S=4Zpu=_ z^p3{T zv)l5E{Y+h)fXDZ$kayVY$xV>Et>){1S0jQp{zu}U%-;VEew7;Q_A2kV#5#tm92|s% zK6PYk$Fi7VWl9-5>FzwByOrBuhgjl4u_r#21n`u28w*uH*&l62&?a${$_n2pmsJHA zKVRfr@S;p!q2rc|aAAItbqNhFB{6qkc6GH~u64Y8k;_l5X8%@*wChJ&st#wxI|0Ke z;h*9F7Kx6$-*!l{DXjdk(cKcR!nCy-UCASc3X+;dAs-)NXWAoV0RKnMhVQw@W z$?)eW3)-@w_Z{H*VC&S-N|>m{w&wJ)`R{Sm??7ni6~(~I+YX60Nu^q&XM)Yh#fz%> z7uS*UZVSDNLEz<|7oQJ05kwSSXP@r(52dAUH)yax8uC7%JD#4sh>_Ah49X**GfX;; z@3R7}w+w5p0+&vzIDBM2EGGFBZ%g(@jbwXB=sRYwk`{=O#?HX+!xd^jD<=MGGOoIb zS%E=mtCRzWOO@=5$gvh;B&17eZ-jjF-0ssc(Ne*P89|Mz(P1`;+l@gpM@8KHDm|SB z6Z1+vn?mgCn_+H8s#4v(Pl@|~mu2>5N@HcAq+`?L{0w+|h8LMkFi^Z&JMjSvyT_ue zSfbPHNgUmV51BbI#CGY+u*A2qi}zldx?TNYzPi4)b#lsW%zhDOJ1ZUMC(WEX`Ht>3>u7$Zu3R2Hk61(as&M~vGMwx+p^bU zV<637T`iuvRyynBM4g5sj2Hn)2ifSR52zn)XK!}|JaQ?9Q>N)CxFDyvX#!8x zJr8GkDs0CPJAzG8iUtO2P1rd0y4BH@1tx$)jGIV$_R4M`wbrfnELxOYG64C2|0DZh zQ=i+ASn$Mm%C4BZSJ&bTB>@YE2wuPf%wOSwN*fC>C%4uBHl^{5q`3AfzqcRsc25F9 z5G%OE_8+oP@11SysRkcj*+uJCBmyvG8SjCymDU%_pxz3vr11*dZDVj%(FB35tgOrg zo2oSzjS)Y7C^+wm<2C2uHLrA-+6yBNDD9qgYLpd-HC>O_`KAD)E74Z?3UI=eBluLA z4=$jW%Ux5H>R3RnD+zFD@%XJy>>5^iRr6e%oSVrZwgcK*M-nbr8m?5oT*))|w zm81FD%$Ysp#G$x;L*aJ7t4Xic){+O*cy4HceN^gO-pe?v`Hb2NqPdG{KTgjhR?yuZ zoI&7Rc(5?vkPONgYj0y~&Jt2;k;i=~M zaFCI2;Uwv{-~osIw-6}Fx4!i$QFq@%^Hxc?5o{Cz1@lT$mlaxI zkJF%+cSr(m9&-okB<)-*dsLBMb6!^qOy@XdUgOYoD>>YMx>{YvFTR)qs8LUbsTphl@f|8n{}??RLpc z*&%8UvEpg7?ABUjVXT|$*AfcM03|t1a|L0IGgU4}^T=d8aLiBJW?zw+b9HG^mvCgn z?ADR;wVi^14{=KnD9sX&sy9KJ)I20in4FLQ*g7^W>mM}iCyd5e>w{VtWKF=00kXI$ zs4CX!*6g2NP~7kdNN5v9i!H_T^@yRnZONr;iD`TANuu>OMMDdN*#V-3gM;=S{opu^ zP7|Fjvt-pV@}TD)YWJWP8!9l&t=s^?60-X4HgV4NL>Y2>d(GALS@P%!#@Bt5jdAUg zqg{Dg^UjF%mqd@!ea?l=N`*`U{s!f{N9~vwt*qUC>&6s<8rmmcr-r5=dqacV-_5ah;q0(=n4Xg(Yc69&hb&r+q6tPOJB z+c7bwG?9?0CdrNZ&2s+V0lDmJlyP_@%L?!@zJT3y+WP1n$ec);rCpY-bK=Lf|`?9Uorwks!oF+1^`@;Tuc z6BAwDTm?k)&fS1at4w6X=aSmQTJ++etT`4Y{93;$c@5S{^4gf+%9bIWR=oeaC1Rob z@UL!@ie%88BR9)JfL#B&J(g(&1A-^YP$ zw;H!$M~IZXSn|dAPLJtYdW5FGPl&jEw=6G2G$tN++ILcPpB|xWW{y_@8^GwDk|O-W zTUw;Sf&SY1gSZ zLkr10mLR7A$Tg4OzDi-Gnd6WlVrR0_PY5C#i>cFxqQH6KvFfFw@tN0*rk2utmczU? zucgkD*7a+QNbVAZDjqvIag`MNMnML}pLX%5oW{Ko#N8O7)V0a-B)^SX$`@7{K8Z)@ zC6}Xxq*BL8UqTwuZHAdq6EY&hE&J2ej6PQu_MaQ!;-G$N1;jWCkEbqMsIjhZ>Z*-|pD#vN9P zd_Rz%naN9aGe`u&<-D^V4O_@zX zLLy-vXjb0hw*|c|9$5eLCx`ZJSLo_iP^sz5kGFi&#;fctQ5#0!DnEN>z%uVzXiy$X ziaenzawy`@P1UPE_K2pH0%v@(J^G-k^sLe0XSz_PwrG3D4a$*fubXU7i_H&;CmRl1 zBl!iYd0lqQ5#Adjf`!KN;5NhW>XbCJw&36&p5hqOWp;0O9DA@gg5U%KDWcbY9so=3 zxIE}i1u=o))4BykvF zddR3@G~`zh#dNM%JArBu;2jt+rM=9eqPp5`m81I4i7cjP0&7Ls_3(-=!sqg~_ovaf5z@>q=`)4o-u^4$%QZM|G^hjy7!{iUHz-{!8HcR1(|IiEmIIVd z&WFED0le~_sYaE0p=c!0qbQB1dv-Hv^)-D{Li<^?2x;6@bK~VE1d7EOQET{%;R7% zeb9`IhmO3EWZcma<%GdxOji0C04nSh_MK-2(`2S{Shsw=@!$|MP4@ToA@mD?jmC)K zmOyMS`-M(PqZ;G8g-GL?OnDlg_#_1KmF#uWFIJm~Dc@D<^R~=0KMZB&LySakjmw-~ znfGn!KR7c@!6EoJcVL#x2L?y> z)fz*W_G?Ip=#>X_5^^@%vj7il{(IjCchBe#KwZ2zjG4AFaehHQV6_D;*%di%sr2}0rE=QJGlvlZ%B(|}0IM#|@!#R4{$v{F!@wF_^b zQ_0{Dhx_VnKHs^I>C6z6{~mX7KsOtXYf$ZI24*^tTlyy^eirDIXzfP&FSOwMEYHY$ zFAVDHmwEH#6Q)_NkL{iI(Vj~N1O$j5?eYPI=RMf24`L)c_J)nS!5{IS$xZ4q=LOP} zQ8snbzQgXpUa21nao%}xYMfnM+z2ym-R+W!&2|bI$xQsLWzy|{%qSRUHZNxUAo2=N zqJ;~B#-ITZ?}S9JCY4x z^oNrYDP)|*ceprI4L zabe_|a3m=gW4hXhO2$})on#a;ltDR(ms|K-3GETFgF})3S?aVo@V;nH_RQ?ZD#Fjt zktFPf-|H&vM3AS<>(uE~BChXO2J-n_W*_gbO-0QKTNgn;xU$)V797Y^ontdTVO?=g znHJv{UL7hj8y_lyxz&oEO1J;T(-~D6mY!IdFfy{`rMy(9*(vqFl!GdVxhSEjuej1H zh{N;UBcx|8zkmP)V&CwDk{bIb!+_lmGS*+`yJnuP^cvLz^$Ww2Q#LikScn*7px$${ zgRBiK1j*fHMRFLG41F$xLA|(MJ@vdLM>Zj$K`ydv0(gi(u1WRVsC$P`>kpH1K+?t0Fo-2Y zR8JwpAZW1jC#mT>STaWoZ82NDVwVA660;B~?Rm>4ddhFJ6bLCzhwUgno7ry#o?KkALmQ~8N@}XL!;m%k zd|@5`gK>lYv)+ciq12;((&n!ns!nBo!;ZidyY9bp=irNP&$IJ$+NRE`gDJD~Qy=kz z2{gu12Xy_F<~+3+q-(aiP(ic=wa8(>LUJ9N*&E;imAdp&)rq1UntSwSaWJOk)_-h(9;e*zz_T)I(-!QXw zer?a#HgSaBvdy^mcSS^1GSh0K!Kb34(u{+>)}AF*&|!AB>m9ft<=R@;JD%??^HPF> znS!$Nb;=>9EQo(W{Lb}c-Rsw&M3Z}nxK!g)M2c6UCyrjZCAHMqC<=%tGzS42<)9u0 z$)Z3$>H^jTFhg8(2dXOg(M3+kbbz=pAQTEK>El?y9#q?3pX_Gi zYWyCTtIUS;j5BrNu+$989_hsgT;#lx>ZGq^p`my@L#}hGLZtyGo`86@gOgjkw?D2C z9aehuBZEGqHQqQh|L&_t84~qgF2}z=)xGs!a5?Os4kM(Q#~^)z0mrf{rx5m}4g-qU zud%ToX9od#f2Y89zWkpMj6%be=%*7 ztM~xG#$k}Uld-W)$SD;h#TpqIeS1DLV8x`KPM3*7ua!41fPuvDuIsG|<5pyQ%twdC z-t?Y}C5YtMY+8SST#590PxQq}NnjU{dun$gh--RB4sA~EU9q;an-iNpC+Uo)o&yJA z5l*v^38Pg-Wfd&o;2{BSf{m>$hKlSz4Rn_n|E8~C=_}?Bs3eOg>+@Ot8W;z-krJpi z=G}=!z@8!DdiD*}+X{`UX{Ha7g`5yI7bO+V4-%Ai(wzeD*g!Qv zWh7u7*#B($L3|FdR$iM~Tt;`Vf#1Ks1s|b(&^^^;R8$|=E&&G?5wI@shR1)-&X^%q zWec5o0ZnC>7roR|Bz{IR#AK|SIW>jwZ+`t`MlWlyR=&BSUuS`nB=T;g>F+O|HABz% zEOyL+DlQBO1<`ZhuKELrj9x;0U`fxbu8vs%-ND-Frmuf1?Z~MpW_P+1cc%8KG2EHx zeb2i3dZ6yW@S2JNKc9S}?@l!8oo9K+Rhxg>8yFtep}rj-F6vZhv7a^y(`^{Fn5Q;H zZ=?^n41fDk$zoxTb9@zBh$xnIbdA9#@8)KN6)Au&d1u`hkm8r1@ny`c!A`;^WH^13 zjEd~xr;9+prG4VTgr#j%?cgicf@`;~6BoQ;{==}&u$>aQofz5S-d~&iaky|LS+Qhe zWknx7HBi2I^F89MpKsDle}IkAjwVmcmVfdp4~0O4uEyOg zlDWkeeEs?8j>Y`K5|3T4{WU9+{-I+I37d<9hW;n+ zbCv`ujNcXF=;`&XW(s1luf96aGdn6j_c-P@YCVKyEWtUyKG^xZz}~ z{`b((4(Jm0kNo<&UBFu9IIZT>{%F_qvT*WFBXu0Trh#8ZI&Hu=!{!*;=8IwPMg&3I zA2}zks3gwq)5M9m4+eSK{bPUE16Z&m{kH4!O-dq7DfO@giVt)cyEG6upSD zTCek<5_f)^-O{qwc=O;Q^wIqRh6gQW7RuX4O56l*iEl(&DpvDck0`hy7Huy^zEM)8 zR~Vm=aGUUzV{JxDw)E_ZiGqyK)=>aEqUh9quV4GCt)$8^_yB06qG(Y z;lz4Hf_RUz?Y|fs8%q@wJg**SHsH=YGp5NZFOT%{Y>?%rus|`L{Nj&_h;W_V7Dg*8 zv!n~f0Hnjpc2MrNBoB9>6cH&e8ENB?1uLxxQ}yN*n?3ZAB_FS9di_#laGi~12K|Gp z%tGjCvPCd9UoxrX!@|~<5<-`Szr@J%^5%Bi${nueV*xTe!Oz4p!&mV_6o}|&ueuw_ z$Ih}) ztRR*bLegoUXlk~wjaO@GYDRaiFE$5WTuK@rFGmcnxy7lWEA===e@YRAD9|f88Pgv5 z_|zEI#&f(!O$7wD&Ny$qqrJFcOfC9zDZ%(py2!iQ^He^)WW6XbMBsECU>CZGQZq-0 zJ4z_Vz0CVG;vo2F=GL}5?X=q*p6{4L!YCI>q|1@3n56Mll;jD2L4oV8HE|MG^_}p? zrFjRH&kEqE~!YvzfXP*{jQ;(sZ%(x7FXgChI9|urD8dYe8N;-m|~i-1>%` zuPlXPO20hTJh`llmylMJ;A^Yw^{#HNhw3YBT#~Djb-sJ7u?o16gFhCk1fliR*48Sl z2yMX4(#1YZw7_edS!>Lc3Jjv09QN@%^F<&n#N-L7^LEfm&r%HZG@c?mcPQ=r7$cWF zPrBp22^BeALiifY)XiHqVgwk@`XK#uls`K*&=u5oGJY4@L5kEh_E8x+1c#lR3 zpW31ZXAe#`QeEO2#S|Bltuk|KKP6XHRo#|zP*Vf4cZmI1nTW)d_T}Z}ud5u`f9AvQ z0KSmw7-=^w?77QqU_9lBH$!-5n)2K-`xC1{wSyTtv1h_vRSB{&(4A7JvBkTEs^KLs zVSLmuoP8jo)I5WH>k?K_@S_|h-cwpI=Z`qLtW3f+yUh?O;=FawPjWPD&=x}lXE&(2 z3)MJL>jtgq@dHipcNOS~OgEdPW<2Y+PL!5cYFh%&4mP(F;%1blo6Ck4GHa6nu=zJ1I1`i|7&bejIpYn!uCE*hi zh07hSp_K}sQX(^Bj*s!;y6!q8ak(|tr#|F{lqvvZKM_bvT6 z7A~$f+e+8$4Z5jhK42JSOWpdIlXKeCpolykC9SCNhs3|#0BDn?-f0i-z2F-bDGIi5 z5M-NiejnqtPDd23F~9f3;}kcdKttFJFFoDJGTlOq3P)ym+qdyhDMG~m@Cr>#YHu&+ z*tnQpy=A3{U%DrVRo>M=AbJPw($j=}B5K{vyu~wa55HB(#f+I?9L#n^A$l_;PIX6Zk9L5Qc3OzFfg?LRLQ@Y%0)#I(SV57p|+aN z5A3k5?EgKH=17~k%R%nl$OrZN#zo4mKLsdC4hM`6Iy+8-{UahHMLY{5f`k2SdoyGb zdy-@OIxP^PH`)lWt4HnErqEYIX1I-MKR=42CwUq_=UJb8Fk;4E?JqMLd^tWTiRbe_ zuM?e~F>|Dct87J*Zr{cIO~S4FBkWEQGuc%6&KX5UYg+Qt>Er%vrrn~tL46hP#Ze~!$^ zKt${6xE$}2E1e<@9dDMgyOb73g9|d2Kcu;aHp5CXFgV&zB_WAV&_rmqRI=$>JKEBb zUHOHqjnZOLpLG@L!7L0U64C@V~rQ<|M|Tqk;0*7WF(y7T&90amG#Hyax? zv)j1q>q)hJ18uVm$|^!F^xfKt7Ov?cb3>{0-G+6)ANP!wkE{!diiz1+TYt>XzOAnb zq~JW~4gx`Yy-d{-wjJM<_4VAkyijG;p7{8?=%G|6ZoBvk5B|_gecsQNx^awbt+OC@ z2uj&nvj=9?OD3q&K8@*z;xzg0E&hq@K7fnL$(+fGj)`5t#sBA1vFQcr$@V<)TNQ@U zdOuRmq{sv0A`3 zHY_(Y)G=cPH-Wz-t=QD4bZOv5eAFHN#P1#>Wjr)k;q&Wat$+>o4i1%NRm4Z^xI*{% zWFB!GinsVPxeY*%m7BOC0mlR!9Mc+ACX!A~N1}Y!uKnUqh>m8fnc#$>{Gp>Gr)p16 zd}6Oz&)-3qnZB1DE$SE<$u2Q~!oYQdp z!!yHw=W5|owxa2(Cw}MReF_BilO2UQbVEf(A)RyC*`={CVg$Eb3Z=W9$Qh94VK@B8 zS-8fzDLTb%X?bJC6!ev~6he@r}X847k!$jYCl$U zpOXH19#6*AF;rJ+xdoaLW~_Wv8dSjTlHu-pv8mp=Pc810z3lA#CuM&rQc?`IP68T^ zj&Cxv)_qz5b*T3ec0)x6<$JPgf|RN~9Jrm<^&iHab#+MrxoV&DG^^Bmuc`OYP5JuZ zpukJKN06MB;9;j5bIWyg^X9K#Bj4wgN%)30JJ(%d4)|2!l(o1flGDdrVjq}1X!rDk z4Mn!|`;Ao$7>_>mhd7}h`IXR-x;@z)aT;+Snqs5Xd7vR0f^UPgVc~KL2tPgD)|y~Y zY|Z&G@Z&{nC>_rOH9h=@p`VPzaKn{M_$6ybXDle8DHL4UBE8qNeWPO<6f)iOm} zwm-;^)>vFuPU2wtTQG?GJ zC?a=`4V>OBZ9DINH-!m4PK6~;Mnf19DhpReODV@ngXeO>odRk*AeXMUk>J4%hhUQ`gx;mnw(p z-Uue$luOp1=>5Dl^Qx*6mjoT>Yok&X7@uoXODGMNvO-{0LnnbDhRgIU^hTO6GB}0L zYGmh>BtySB<1cI;bTP&2vdTla{EBzlYo~9UkNb?DAgZwR6T46-6y80&U}?B}XJM+hYNM6o>kyeFGJ;v%%5`VnWYKnWKSQ8e=ySXIJuvwuV+q;!;=Be${S>tngdClbPWLZj^O_5(0q`e2p0P07Fo(C~urALFx9jS6{~0 z^{am@+g-s6dD#|Xog#-sPQCvzC?j(_xCM(a45xZrl`a;5p%`se+2Za5hk*|$iP$Fg zcRqYWXAn}qP5EJ+kclY#R+OAet)cz{9yjA`4YEkt4_R4%NQlS5{b9b#$Yf>- zD(K6o{rtj$g^v52ixv|r%qKcJ@~4h+?tDbyAFU{EOmGSjcCL4lD#kgF{FZNdSSv^8 z;*?h*pmU#W*$P!`1hDnY!HEw#-K(p|BTD~$94-;wGK+?GhpVO%(f81mZa#B{6UGvo zYX$6lWQ4K(9)%>=pZXD&dh>D|KDcjoO;RyJjy2(SBJbNbcfT)g>hlv{P0wzTCiv=D z{lS_fr&O58q|*BF!1L!%Q;BtSR84tgW#i1*L1)<+mdp&wVV)OGr;j_1#}m_OEDwtN zwA4pHibK&Dz-wowGWhTk_Y+Hs>^%L4O-ET~A76LoFc)0b*NnBes>8F&PZRT@fK|hUjjl519XC+O6?O5R5V@gf3lT%4%oPOq9w9>1m^ znuJ}AcQIjFpZDn{9yY&#;4B)&5GXhEy~W}8c5;xmkUIgagmlYdM7x5=K9yeipNQwS z3S@Yn;xh`1yVb#5N>f;_KbMGb!oY+&4XK zbF#eIDR!Yue`<8DoTI|T2YQM5y7AhiX>1 z3~^myoRLhi2rnCV&kxqh!QtH0OjH}kSK}G9$k-?b238b43?SNTLvCHIz%lpXkp5j@Z+L~aG_D9u~oAXhM zaX;l8H7(rpqfCT-jh{vZypIJuU?7p04rS4Zx9yM4&YlWax2 zxAa%@+tf5o&pATgz|D;FG)!kWPE=|bgqrgT6z}ByIj2+Ze_fr2Kl+JqlS->@`PSx3 zew96McACUXJDMgHh2Ff$zSd=P^gkv4cshN};kepiR@ake{=VX!hbVL6wGPWVenATg z4wj2AyheX_>O<)jt#9fR{CK>fc+dO&tp~3$j{!H>CXD+(&qPJ+We^>Fg&kxvcAwzx zzaA6r03kG;e?7DJo>y>WF-5RjDrCr*|NR*As9PUmo^8-W?)6)E5&t=5rveTG2S4+W z`oDK=-8+&(6m4{Uf4uV@3kxg4LQm0BRTYaBwy$8}UZTLd3|p7rC3%VRf4Ai>F=OHU z>w9c0tS}oa-2WV-2A`OJ3h=^|`S&MITqqVk{6z#W?=0;99*wJ!h4bHS?0=P%){;?F zgoCuqTrDgd-K?G5*QiEG;0p$KSv_}iQ+Eqd*aII}yxhFp9Na=2Jbc=`+@joqqP+ZU z+_1r2Hgx&T|0&?$WNu^W^Zzf<7TL%R1&A=eVBu|JDJlzZ>Xw#n7VcO=!d<`pm|!pY z|L)bW@wTwndu-zX*JtD8h{eOh&ELX2d9 zmgwnJbFjQkg!?M+@0bU(eh~GQD%A1ddBz~e0HFyi;VjTiTvt~FEgzl{v;||Z2lU{1 zls#ADM_(@U@9AT6L<3hnUty$pYLoW2@=tTikJf`j+E?F|K5?{hvOSgO0o<)W>DcA{ zY(II6ab}q-v_#(YNL7{zKuNS};^Y+|`DM`@JFz)iKivxS(!QFR%8^P8_>0i*-QV@n zpi_~H$UuS$F(nfUNS4A@gyPYN%3J!X;D$C%{P5aY>2W{fn_%tSCi%rJ{_Sha8 z_{98sH0m|_e=Y6Y`Zx-QbO@}-f%P)_k^Qt5Q<5_hjFn`jtPsS?rzTg)=3OF9ptQOj zx*WX?-e+^}G-t!6t@~2% zs55b}y;V(pVVjb|7_l_U(C%ycn%r8>7y61wKW!q{Dx5E>he%OASGljU*`al@Z(FF^ z0T&~3h9h;XD#LNV}^c&3V z0IDm12nIagfcz&IEHPwMxGUzsJw0?{p9>Q-dazO*dKI{JpLiYQIjFNwKmi&l(0GTO z3z{LQa)(1l@M4Gi1l;~Rau6|jNDLE-@gR7;Sk_n0kZ1_vd`WcF@FL<;p=}X#?xu&>= zF^16$84WQK#xca(1?@s?$X0FTi>MdU^ z8J{37|C$}2*Dh*RzKYsX_D$%?_ABdA@Xz_ceBXaT#=#!Q=re`EcE-`hp~Aj^68+-+ zCFgs~_wqiwV9a0!5nmDH0rCNwFpRKp#Pu}n`Iu4TBbHRAN9I~)K_nKuK^$`2CI^Md zydS|^IEWl@ET}li*cZ$lR{v(xO!2LExn!JT&fk@6njM+#nz1ypn~hBJOr{@wKUzJan~Y6!*I=Rtrzgjx z`xc|cXN=RpRi&fGU75aUYH5XISl+Z@vud zIZp$DGyXEKo{MlcU-qCJh8$LwqB)~^#GTji5=jV&fJl)DZMcqme!GJXoKA)AC9)|} zG_Dp~likTLLyiHZ@Nal-Rx4QQ^2<8Q)itf*XUIg{T^1e#*Xnk1cHpgWt#p?zk4%r6 zm-m;9{8{{>gm`>*9xQwko>PxDw{Pc%7Zi^bH-E2NZsZ>Ij(xLjf5(_I8s$EaJVCrp z+;Sh>^(~KcZoB7RZTm6!ar^PU=fuJ+54vP5G`S*O9eYSwqguH&21hfc^3;7wC z?gSH`5gX35E$Z?os9gEdj*YQ0GUGvs3xjbmoadMJXJ!EZd9BlA=9(4Wd z3Rd#9jA`;Lcpjud(>9%IFw$Hn-6@0`KQp`AjWAEMJF{u;C*>#k#i6yK+r6{9_al3q0LD0a3(b=r zhsl0MivEPg;+kU9;#^Ev%?F z@#-?&Q7z4e+sO*p%BdvJBwHO>-D;gpH9}Rr-eI%JIriM8$Ys51n3|QwDVNQD*Q+J? zW&JgjrhK!))#15lB2Foe%@zEf_LjMt1{-+CAAKn!+KDYWFQM;07C91ai`ND0Q|;{6 zzqS^(k9Ag9m7Y#fELt=-bQr6z)%@xdaa&$)Td>(0*ii1kI#<2)eXxG1U49U|v|gLu z(!a~Rus=g$LP}a7ZC1AK{5$Asdrxy;4J|=vV|8uKb^SWC-AdHJr{cJBeVstIKz0}N zkMJAc+9tL2IbVwFx#4_B$@<6$e(xM#NBg1ZLBu@OfE=OV5Vz~Urq5FmbDwE^zHtF< z_o*|T3(x60=#T5SeW73KKQ17z;P0_~8916^Ecl&huIK8hc$YlVe!9Fl%V(;u@4k{eP7D6@cX-X; z*}ap9l*nB><}VRs@HVGy}jU*p>mD*i;lc!6Ypx3`UJ zirew*t*$LS9Q~;)UO0og{Pc8C*BTOt9})z`C!#P?apmJ1RCZPF3-d-*)r0jAfdyi( zQzlq$j|QEGPTFxCgmwQd%RzxqaDNOe`6^b@nVInm%APOevAer=5=6`ny4KuUUvKPb zePrz_G~xua$SUfwt_Xp-g345J*L83fn-jjyF1yO#K6vs)R{81?aP{gBrmP$}qmpTY z4VVpLV@V}h5Xg%X1PTZNfnI<^0Vg1kD-#Ix*8l|KNdtkf9I`qT`G6BpMn5D(L7)Hq z<#m@P0!LsSBsHBuAb8aOK45d3es91*XcsA2G3WzmBv?##H3(E25D3Z4OGU#)$tRiL3B<8 zSo6CVq~aCf&LOyb-OQn?U(uJ!5Pa+;ity#?U(6N!_t~`eSc*T^w?Tqfec<(xEBHAV z`#}VszZO4#RS4nTgFwe^A+@V{QlBzmwAu22uJ`5YgT2mfruY@dUocg-uI(f4#1my| z7%75aZXN1-Sa{3u$XEGx3b@&1#)>t4_)T7Db~nOvzAY*P^~Q>lSneDyWSocwE7=#n zCWS~mb>+ybgr&e#`#1B?OHL69#lz;AMrUn8>}_dZTPF0-$0U_4`2e|9t;!gEc-u(} z*lk~(_byk|X>o`Jla8E^SKOic!qTVeLhpR+AjXigv)E8!Ihw906gw%h{3IK0?A|l# zlGlj`mQU+1eEvs7J^xOAx^ih9TAXdZ)u&YXvH6DHSN~eU&HpAC0ew$O4pRGf#kn7VhIfHL&1};++gO-=&eToq4v@R|*n><91p4{W&)AYkG%;kx| z5-xwOqu?8N#9|;fi6U$DE$p<5O?e?UQ#8`lPgz=Tlr2!R*iXr6_+O`IseFD=wq9b zc+s|^z`?`=53 zzeRPsK%?)ua?ZZV;i0<=fe{IV<67!F1~vT)ZlD=k4LfiUul6Xnw%};Qd<6ci7Qu0m z)Tq!GS7T3?b}0Rr?b6hrOxwzLn=Djz6V%uLR*eHmq3+=Eo4VVm@ zB#TtnD4VHpzi@?tSizC{#4LhwqXmlGgB9^+JW~2>zT42y2mMjP32B>KDP(SQzR-zR zfPn_nGj-C{!CIbt+PwY|gDJ=OGnr!-Reb%VMQAK!Nxtk$wD~z9i?7M1!U-LG#{icM zJ}wQf3uU9R5D}Oz1ScvF46i4m>{%&q&MP{5?R+=duq>It?q<9V9{>Ds*H0@RT7oJ< zyvOd%uL9|HT|Q)KoaHAjSuyG<%kY)_6kv-}E9lO2q;&9BB=Y%WLkW>Z(w@ciB`1U3 zqL2OaN9lPZu*O9z*I8aADv}ae{JV6pL{gH;xYdc3#1`&T1%^jw@_bULDN}O%mPY)+ zn3`dPcuE@CGey2+Fe&w7@qsaXDXa|ftNe*EEJmg~1J+s<&_TK8wps08$UK#98mvo% zzEQXANQj-x7;&oU!XW4e7xI*!R6WoQ+NiBFOp2j0X4T zj}C0jRB*a)3Cf>k!CAy8xp)>)+%;TP6AYx((7J@Y)9Xh@;d4m~#s0kNpLI<_#%NYP zpn#?8(|AyjsEP0}ET5HxqIE$rQQaLZ4?PDY0Xa-lF78lB7MPZclrLQAt;HQDqA)kD znMjpQJt0a`&nD8Sfr#2yTIf+o+S!yH?F9D}@EDX6;USV@HX7R>=|0;R;`p*k)jz78 zBrl#Wv!)P=Ln#p#o3a86DcZu=(AUI55lFI)-7wE3=giTdiFJga#G<1%O!IP?!w}H< zzE?}3PoHC}K`M`%)KgHJ*l3=Zs3wPsRI8dAM-wcQTuZF-t@w`Xebdp1yoBYGM5|{8 zA=V)&2l|JymV$yv$KYh(RB8iJ?_u(4v{KYEeOAB zBlF;GiG?t8;8Y)xkxRccN$pn2cp-l@4Di@~cL^g6knj~7BcCv&{>*~jsQWHDZ-G_k^Z$kWW4S^KVo zu;D_2Tn@J?B5#4N2;+WW-uY{~!iqAKowiae1PnjoFM*7lb9tyk8P2~t*U+zYYqMFr zeiD&n#uyjU_|{;Au$UGkw6>~-ENK+h#$*S?^|2zgsT@@sUo$}}RTYJtk+k?4?P@m6 z;S7?$8;aZdv+0tP`WpH9r;mgA$YD*O|MtN-kvPQtoCrZHii@xoBGCAe7C*R#3isn< zPGo%e4}YRoh zNnwKKdui<|9Lv0wv=p;HmPZLkWw0g%FZh=C=>a}0ZRDr{x)fghjas}YW}x4ERy))| zkSc#`J@cf>FwLEyept0znfTwd(ryjNC1dM^t$ZkV#GzV-ugd-hOmC~QJKy3vKbIKTgIjv(x@I z#C_AX8dHEc|G~z25D>M;10h>FhSI%#gggPU_IrbM?8e#j%ZhDk)~-;y#4WsMzZyeS zb^f8&-}p1|mIaoS$?IB#-^X&qU{#*z8B`b*7{b)N{<_3Fd)zyqz}YVKpyb0Zw2E2E z=m{$E%wX|oMPCA1!C~7`ii@T-9qtQ$8K}#w@|^!k#+!i`Q$Cl-*UM*EP^t=os#Fo` zR14XxL`f}9K`QvrdV!Z^$XT1X_wi1yx_yc9$VB*e#NkE9bjCm8B|c`Qjg}CM(1M%4Y~cx(r0m{a--&W442d?3S&78f)e-IWD}lA z-Rb9gc$rXL8KEMiG}O;#;usQricQ|Y<|JIUF{#L9=;G*Rrqw!8RX)pt+Dr6sv{LV6q`BOU5*r;KrGtnFMST z2ywuOBNDYhYsechMd)pph|;S3d(1x(VPKI^kEwkTZlN<(VWe@WjRPz-&^7p)coB1H*sDTP$aaE7--e6hBZED?Q5U>fW+RzuUaC#w4)sPk^d;D} zC<^{st0=zM8zpS#jXU*I4@!?7KOhMP@#ITP=$ZUEY)K2G1vrE6qcK=D{9b2C?_)9j zV4Zd1%R_)9)!&HZmfu(=_H78X@g0Fh)#NC1Q*tv7PV4oPM;x5EGL1}SJFW@@M#T1U zrkrU$)1Jn1;Kg~rJE)i&ny%QPvAN#~hT^BssQPPjHEQ?nJi!djmNUZ;-E{d`b$b`$ z)~~+eU)?M3UFkO-@X0^VxPK^r-n{m$+b3)b>m@XoKHm3ldG>jR&bMK~)#hp+zwg`^ z2yE8I?36P5we|Rd{E=|>rLNM`PXIF-?kF)sqnLN$R-QCRi z8gI6`y|>*TFSmTJE;pHG_v=RtvsgKXvAxs2;x;7K@YOFbRJ< z^~r(O-lSCp-0Az@g>q-P2m@+TMRYO6goLGS_&n;!f~?%btSh+L?eRrUhQAr#bv39X z6ZocZ=FH4NI7oV{@~Gx-)Kj0YPu4dSy}j25`U0PE6_gy43~lS%FG2RaS%fuLkz1VVQp$YjB|c%sl_Ayy7fINx{ff zhhCv$;ORb{>yb5yTxuCwpYQOS_s2#0-Pd@unT{~IaR)v^LD~`w)9XkaDA{jdPAtkd zZQ1V~^no$NrGGPl@8-#6Xe732lwU;>96ulH1+Mwq629JJRFF>HzwA|T3_|)dPTf6X ze)+2{D>E;;yx^-UhEr8U6R))A$Xl=ZP2V?6KXCb?sHKKR@4`vEdgPQMF#tv5?eyej z29au#DNx+?Q$aDQ$RUP}@b4+x!m_?%k_n5;uZhS4>MsFsmST!YN-d2p5kOh3g7-vtVi3#fzjy}WQAw|sg1dQ*pT|LH2|&nk)`4D5IuN(JTD z)R$3MWQePoL7kpj`u5B&+0z?;1_tweG)p*i>iT|oMiwC0u4<-lxIYqfz4l4aYj%L= zPXExeo5FaHqQjl*Gl)CZ_X;&0p}T3@4?Yej`Z);C0bPu{wWmF(cW?g=GWfgM6!jr+LPT21*ci>e>z(ZH<}*dL;l@I|X#qR;2;GA^Ga$06g@dS_1ST|tNx%-)HweL&d<-wR=QI%hGFgC8aEJT(;kF3}ay3j~?qJaDa91Ai3xbu476C+yli-9VA&0*z{GD!B zka_v}@yJ;IL6c_1784ev@zkyKY15PNM~SJa1AQVGZ~KCucoMM$<~~x)Fw}&+VY!0$ z$0p{cN;)coS2@0c88vZw^;U?S+iba4erK>kJ1$%rt%hii+urI08KR2l#kCj+M8nI3 zJ-zD5*7|L?B-OASsrHB0@r58!QbiWl`R92epK!%OaZ=et1+Kw@*i;mlCbS6AQ-mBp zmiD9sMKX!F4Nkj@Yf$6H|x_|NA`K27|g$#%yR|8lNLLP!eSivp{LH_&V$>=+#y4#AJ8QxJDCw zo@z5B16gBo#!y#RHIlmb3%$6#TK%o#lMM;w6d{LeOm$5k3?WH%7 z(d@Sa6@}u2&2p@6?=Wu3@tV zHV1udLBXsL-;VN|06vn0kyq!YoVXW{TPH#5_z-f>tE`^)KEalsI|=45$kO@I_s6Z! z@x#GGr}&(duoA?ItxMpU4N0*hB|!sBmX_9JysU`hrfx9tN^?t?zpa{goU(hh-KfzE z%G)7}$l2LLE!e_JU^nbIFD?jRNUlBhz7s`@!#26^+_crZx>~`8_Oo%YlN1l0-RwNR zf=&>iB1B1_y0*rV{-zl^RP;ok>%WB+0|=zdhFjRs5mTTzP^bA?H2z2Im#8s5kCxbX zJTwaTsyxFDx?q;Rvm5b6^R%1B+_VO+%r=y21dw;oE0lWm0 z!@&3-5V_Qg!3==uyQl>?3B(1#cfQMyYDz>Gh_AxLO^x0M|Dmd>WWx!MC5@idS!TSe zEP(#P|544cO;bLAyh$WQ9DN6p6dyu&hhrH)n}aHn zbdd$*%osp9QcKB%HUV&hdWJD)l_w7j>0qwVHC(hzB9k1uWOn-(z`ag9MWHBdS#JMG z1SU#rEZcPDfNlET4UjT*sfd;|Oek4eNrYdzNHP+XFwC2td#^j1D!N!8D^DYKN%`O6 z2dXQs-fz3`89;lqtP4hK;DnIJl#zjYpo7|M_duy zsRsRUCp=cY-8-d=>;RK&$j|UbA%n(skH6FYf1*z38LU4D2(qiRdjnx9_S+sWdCTlA z3?|nYu@#xJ(pjZXPfm6KE-GxUj)vVI$-X;f1RhacSt+!s=1j+X(ncIBrk@ExK=%Vj zRh50ieLDN#$c&5vVVVd^h#XZ+`mU>ZQ<6L=$)I%|^$M0`hMhom9z|F|Rdryzwr4a5 z&)&f6RAs{sE0)iLs88W%(}D`IUI&&i%CDiHLkQU}p$;9N z=|awKZN&^3o!%c@F&0|lvYID>-$3tQ3VQr}2@^lscHl3BmjIu^gsHn87&_nd53pd9 z?z`UI@EZre?U3%iM?|Fmv|$fNCK8jDnoXPC@VbjGDlNT#$=dXOxY^y4|A_BZI3eM44eGxS$vbdo^WAOy@~QVj3oR4}Pq@b$=W=<1@qb>3^-2y1 z&PM^b2v7|Y=2Z95(INeYOEuc^0LHd%bp=#ZSYdwqfY4pW(dCMKcyI$4zp$r1zSQrn zl#6i}q6jED?j9$}SbW9bHT3pW4f zMxy;YPtT7~b&Vb;c05j7N>;M$hDq&oJ)UIXCq;@v^xq#IlWZBx*JE^n8G-)ICM#Vk zH*8gZ-TQejn6AhZP4s@OC4W%PReEzD1)tLX`y`g0Lm!qO%O+2rXsp&T3sMms1!p03WIqNjBqPPp^rrikG$5dW z8*ext+nSgZ>EDF1%fbp9v}X5cS~P2Y%?LBZ2KIZ2C0BOLRxcL#z)6L`DXHn6p#DpH z!w8#NCHoeeLWP}RWWm2~x}^>>;5WZKZo&qPAO1}Yy?^dH=@{NE9DxZH=E6sMxDW*R zjFMtVUdxKM#L{WU0Fral;|nO97KyBwoQ(gXN)6{`8GN2?Uof|HR@~eiCEy_jDTaVI zrsk9@yJEeqfZF#elB2J4ZkN7zFo{Lc;u}E!Hx&CTO_r>^&zsIqJ_0GV8e(2rxWE*R z9N)889l)qn=_JBzO{-O#F8ukLlp;rgkK{hds2B9$#lKRe)^f2jglFG9@`hIf`TM-X z5cbCFbkTa*uvyE}#>xm-_b56B=>>ZLK>rmNSy62!q6DG$=1xSpR4qLjl{~$_jXw4a z(be`29o^azlQ1#@{N5JMTnPVF_}bk6R#(saj$o;J`zK0}2<0Lp=hx#MJ3x()q$f5$yu8ml*yWqCQELR`jA>v{R?IQ4B-L?yhThm1$AFYE>6 zq$7KKIpYhcMFL>LNKyAL613OW{!GdI$mk0Nzqk-3{rV%pJn z+%$Wc*W8Se4-1^LYt4M(!3B!Iuu<#AV*`c+1}d11z15&uL-NOu;=)F>0Vc^GvZjCx zcspkFA0I&88t-=B{!WeEe|Eq3`1;~K50JblxvdoL9+(eKuUhIhP(rZUe zVor+JQdii0TI#ktPe3snGr|`V2%J;(5Am`B>akRuHL^GVh^T)qM-v%+*FLJBRn*d- zl7Iike3)TF#Y>|98cHa``VZMNRBm+wYR$6yuL3-XKqCC}?n6#mir$PE2miH5$e{iNOUInTlU!Hw2TjDFj8Ry`nB}1r3OId7 z*knOAhR$r-cUxby3xdAy$_^;PJC3}gqcQ_lit>cgZc4R+?Du$(w;@}ldYQJB{sr-UCJc;UeZkxDoLQyY)u zs5FOp2+Wm>K}k+C3ysKTz*r&^e4vcu5QklHv;H@2U~{e7LL;5PEGy;BB+g}Jq$mAN zL_NEn&9vY{L&Tuf(nD9RN{v9_8!HqqASUJ{NSPCDp|v%;t8;uuz!zG@f8rcb3|7F- zfh>uO!Ac^;u!>5#sBzNAy2>?^FiZDcG!zW^JrGyoE>~L`&8fb~&hHh+fX&Dp2#@3H z3zlnj>V#eT779KFb{sMJ>u8Pc-Ltbn7u>+`zvsfo1&B(bkr+#|Mwx}(@cg!1W-@X( z_h9WrTBvgop>Uu2wllg8kCSp5^Ed`5TQHotjFPW#p#bb?&|~T_U zR4-K$F1bz`ejFx$sao9%NXoNL#m-S8{Ye@n=cK$_k`6hMktU&+f*hx^3`xDNI(a)u z_BrJR z2LRQuGb=%OnHa1L^PLzauf07qD#|5G?wDd)WF7*b_XtzplRjuJ*T3i)HHpdTQm(Fu zy-$m^?aw8U8?MI$X(fMm?o0uL{3pH;zoLv71qQTp??r>l8rI*hc=ED%`hg#j{^n?D z%9q!k)n6_8hnjRrYSe*F@Y#zd@t1SmiPl~Pt>C)+=@Z|P+~l#kz0KiWHPxSShnsnc z9}YZK>b9A5>LUSGoB5WwBeCkYZ}5zc4Hc1=%B6dE&mR7}(DWZq#zwQ)fVBqXw`B%) z*leX%QKwh_>$|gSI7WfH>R9@`MaFQ;1@BX<|ED|>Azw(%hCaH{y;D#DK3@qc@ZfL5<-DGQocww849Hm^EkeL~!(%2y1RI{8kUmm9| zZDE%W9YA*)bvxpi^lkB78#*mXsmf|CI0J1wB8WD;EB!z{NqTadYDL6Br5QRY?NI46 z7Q6W9`Ft`{ltg{9PCN-H@(9G{3aClTMVgGhNVgDLh&KBZ`atPOb=(fZuC0FoMBwIz z_tj=oQ`7atRc>KTPoM&INQtG23jWbEmL4fO9JA*f`O#E%aEaylO8c*d$;{L96LL<@ zaJ=K~fJH0g)6!fPvws#P@{FcGp49+m8zyMo7AHsDoj0Y!R_9A8S1u)nIA8D0U94PI z(AS@)`jKkbx{kx`1d&_&8WbE(ivmt5pD}o@$y&c^lT}e^Jee`g4HSc1YNEB-v{`@1 z4G89IZHwm1sZ$I-cjTnme&G-i5Djp*=`he^!cR_qqu1^Mmz}q;v!ld~R^qXxZ8V!a zcV)q@2tmQ;b_y9AL)&OG5b$ho&*IaB6tX;Jb8>dpY_?*@!NG|l&|WB2B`To-Hhkcb z(7(A#E>IjXVhGOBQ97gy!&G0JP;!Q$G$q!t!}x@c-bYhH^SV5@4R&^(sdAp>8vw6&iP5{t3Jz5}Wv*QWtpSsEDn@7cl;>g^81*yV9R zScUtjO0wY|DhwG)OAp6qCeAnW?{VrBCmkG^u-fS`httwxvs;m4{@A{_z39V!je%t7 zRnr(2Svw2ROuVf-S%Vb8-79>Y%t#vPXCGO0uSym&Ph$HF;H^rA$5s$yo@b+>#T`hL z=L>_-^SpQc*!6!$yXtuq=rdr_%QnoI=r%(V^#4o6cm3NJ$aZjX@m9KuvlOTYbA3KL z-_FZ(9mca&xNb)Y>M~K__(pkE;XUgj)0CGmhk*clZR^L48-zOcUWo83+(p$ zRO?Ss(({dWYoR8C(;vbx{ku$oLIE3H8-ouh!e_3@@tpLrLd1Y-yqvEna9AknVZTkj z+?2B1YqCBt^J1(pjZKQnJRLG!wzPmnjX}6bd@x|!k!vrpWHEoR0k+DYzTj|;UPrX? zlv-lUUrzHuki-xIxya!I-`&(OIWnUy*u;&E$^3F--`)%Xh5Fyp{$;m@g#bs7{br=R zY6kdDuwQnD=PRUc7i+;NL0=&ufmDS;Kp$p?jUYs5o{fix$HLau_$Uge=;_^~n{XHt zquzX4PcDlK?04F1p(7W56fSqrc@@2umR7`&QADS7MoGS90bLyXV7f$m)Ha0k8bK7c zBA}PaX9xk{Q$2KqB7p!(2K49b>qaDt0%9B4TVrzN)1tlK4=#Mek2lY^9q(;J7ef*Z z3<*HL3B^9tlj@btvLR+}igTfophu>b{Kdm%LikcT&{qbae#UU*v;eRQl6G1SWYEY2 zM#nX}=ory`r!JI7IG_4&=CUw09C&J#p+ergC6=hsqLx-x{ktwZHy&|HbC@v1A$i^1 z!AmV_|Cx$5H|U=sHF&aX+|phNPoq*6K~n~C8WX?GnvtFZQj~y9^Tw-NMO`)5y`v&g z)q|f9xF|QQWwRpwwAHuR+g;cKVt|tUKJb?n4k^UK0`v(2o=Fi`{d(Ag05djXSwa&E zc<1I6fQu0!0~49<{I0I9fbB7w8-!i4X{iaWJEM*_kOrnP-(-Vpsakt_{i6`V|2RhusQ2qXhAp#}Y_@00VAAvn_3B$I#x+ z4a~UITMzKM*()->!SKI10ejX9M=ffcQ`58jl<~|!6k-=}5gFb@>jsIv#6 zBt^;eohiv)LuGj*%l=wB}MJ`yj}tcP-03-=&EH zc;M@#ndwy4>cZk;z1O7H!{w@kv=tmO|1~Hb=Y~odxNK%+MRc^y2*_m9Sxi}gER{^q zU!(Sm_J5%Pa}*AL#-#Qb4sXj(2_nxl3%0QYc>yuBpw&h*M?k8?XJ-#3$_q?+UojqB zv~G*dvt72oGMG(gNEs`m0YN-~pjmQMjb>8@vl2v&R`t=BFcwC;@D&xCnGYS&)}&`l|GV)#?)EIR4!Z4Tr)T7im_9b$S~#z{ z;Y;chg%J4)Yk*Dp&DPe$yu`3w8u4?Qyts%Ay>q9JT(m3N(OMfXJDb2FBW(L>cHBAv76OnpBO@bXsKA4d&__Ujud&0M>BUEYO}4O+bt`Q3 z_%5fBZGLS@++2c+hQ<$&oY~pgfYB;|jb2zt8Z2%`30hj>SX*DOU#$Y1pHaPr*SE^? zLsHa;nT3TYz_}ma%>l{J{Ap25O^*N5h`-Ut8(!O8%sPwLFsf1+Yk6+^j<;c z=<&n;L#J$Zdm0MAUgX~GR1e=C(~C<&hGOz>-!A@*eut@2qg!2FO)KFx7^ZB`aM3kC zU#XA6Wv|fh3|*(k-R|lRsCXf+?Cc2D*NV_04#l8nc*s6K$jwQZ;`;64Zy8YR(oXWF#DC5tayZY{IWd$eC z_uv|abwCBK#m%|u`q{Up%5q+tsHs+w{rM4X6lTivY~lNDGVl)tLLGXpxPjP-U4_;_ zS4UL>@{-zKgQX-fHU~@yz#ice_R-KTdSSS&#&x)LB>d=-G&j#(8(wFVw0Vr*S!_zH zRCon_P1x>AOzOO}`MqPIEi58XSQ*?_$#3$dH+2V+hvRfbl4HgkS?o;U?n=y*wX#aW zXbBEfB&oP*+O78GsMS*@3jpav%Q{?44)xxfbSL4H=N}h==JG}uzF7hFP9zN&H)*1I zw!rCXyD6GfiDnZ5KW}s%FH=1Ct^*#FFjL$=9BYC#lkw ze4N;IU=wu2Q*{=>S%S2e<E`Tg~b z?mHTI?7EbkS%w$-Iw;PC1;Fah8F{|0p=}}@#Rw&tg5) zz@=_3AQh3rlZ1HL<;~fvII8~FXr!>cA;uZjR|t!N*KL=gQFRTUvrk|sDozqLGFy%o z5j*t;@36zSGKW-WGgAP(wYP-B3_8AOEMBjGZB)tcw4?1s|UAGs~Ux2dsD{8^JG}CU*#$KjZxuF8?0) zbeTCSL(ijBXe-ZvXxCMlZIog&df>a0SUG}_`K34N>it4iAC{3?WwAB2itBHR&LVhA zF)4vy=08yTJcx4tTicZ5iFO^GVl=IU93|>&L`GVwi@pveVafWtJQ{eXEWdy?^?#jI zUvgB|Rkym(#dX{jcX}aT>w^R>M%am(@EKgmd5~qnSx^)@^uBnJ!$6ab^so8FU<>GW zz!V=_Epuz|;ObaphoYpFq-%V_S35uc+oY(=KQL;M*RQljx*I7@rq|OKaVEx%otgh^ z52%5jlK!8@d!DHfFy3f@@xDGCM%&>O%ipshJfY5(>{~-Cga0B*I7&2f8I(Oq$ ztGutM_11Mx^Y=UiS+{T!Q=F_(gq0@26u=ZFW}&xvnt?S^9>!;$LgtkS2(8vwrKDyb zRGUJV*_|BN=Vbkxy4(G&j=ID&7tt zE;czFTeR6yn)-aY@*f{ltz7LkNA|zR5+nnFstN^FxX$~LaLeP)*6;fLipALLG!Gf* zO>;RNPy_M|1_B)9(XAIb9F8g}qe@GRZ%+k&U z{i}vz%@KL}Mj0@e?aFu0i+I}4K4-AEEIM!hW>K?{?p1F4%!HaRQG{ofFb&32oWKJ? znwse*CMI#|@qzP)QMGX;B*ii+@D_kkM)-e?@*VikA){_Rc*i5b_@{1^;~e!`#I^h9 zFhlZ>qlsxYgu>-B*5!Kd_M#+nxRV0OG|-NgWA-oW(wx$QgP;#QTr^nBvZDK7fa}vidEG#6%$M=0}-4Hbs7cWSn z3&{gCTBTZTNlgu5@Ak<3vaW>TF7=7mR?dIYG-hB|=%+_os_j-kp!=9)68GxGHkhtn zo}6FeGYAiBf{KwdHIb?kMExyW98iUo zYSolvWWn{uzg}FrWtAJew7*OSo)oJ)f{4H4!mv(Evcjk7WCa`M_rmmN^-@Xl1&Ib++2*&ZwE54&>nix-CJ- z0&j85g%W5M_U3?e1zvLC=3eD{J-=&$T*KxzBG09NPwIH_B5b?T!^O*l2@3)y#p&t# zD_~`qKf^qIx=d*3)T_;WM!90}`Nx3gejd*i97<>zG}|4~uKHEx{ZBVQ-m^BnoPUNJD{#v+x;*Zi zmsjf?(PDky6|>})^I$E2Uf5WED?5IWns#MSQ&D9)?niQ~DE5^plGSUx z*rnPd4+EI#@Z8+bLO7=fJ&}mn|7hdeW&#a#;a zXbZPTks>dkIkwiEYn(wj5Pp1jVegA3JCCia@h8^*%^a|fAMb*G-}UqefdN?q=ytPS znrjH;3o6SC4toc%Jr5^jGK|^7fMJ;i>`nXUmiN;<(MNy~@$ai#@0_qO@&7!s5pysi z9tR7M8N>=cxB{8Tf2oqu$W(R|4l8beBzb>{tSMJEgWtbGqJ+fkNunJ8_{q#xhdWvL z8Mf%Ga~r=Ws%@YX^|37YX`hj)jS9vXvh!!w_*~E-uJfuR7@DXp7ZH!M-ewgpLtAUA zjAM4jHQRw}Vp!G`s1(1qWB;&`{i9H1+$ zGIYv`{D^Zfx!z2~`3t2ZIbuHy10-R^E^8_X^Mm_0I}SWd#ZqQwP|pKlit6eT*4FUx zl1bYF?+7JqXs%<;&CNg_Bk=CRU8!DM+}Ma#Iv;3=4R|xPTFvnq-Ojep9`AHkbB@=C z3o2|l#}fs}-lxOb2pmAIjxfm-B}LS6sj5rp*&%VSt^y(+c*mvD_7!QZ!_I^|Th2#- z5eQTh68h8c!zU*vBhaEJ&5SSEovE`qFfu2HU+(d|>|wy-Es~Co%)$;2rk z{2xR@P^z};{_9NxNyD`VUla{)@T3`D5~rHCEhY(_5&KhGC+SfaIoI&J72pNz!)bz=9G-j_+}p?()1=1J>bRwXH8p&vulPw z>P_T3>CA+EOePu*=ER(#@$s*qssWx$_@pxpxK&#|O03HpVwsBY;3xakQhsH{YjP=^ z{`r5*g%53S&|M2itKj+igg(37x@K|DJ+C;QL4bKJc|;|p@XHzs*zgm_=?&FTx#rMl zr<8cDL=sUt(nooD1RR207ug4w{NM3*ui;XJ^x5gx;C-sb=n*GfdVknkllk1D=p@63zI|)izLln^tSKwq%?C9C^y}%_wf-prF54Xep)XX_ zb_VK^Lu9y7si^~X>`ikc3h@RN6QqEfN`_Nqmv3XKjE=Hs)rABc2Z#mU0Q5&%`eAG= z`i#7ir5!s`;XQ$Usu#u=TF+=@y;$SyC<&^HfL-w2@y@Tz+=?68!9fg#lDF z{fec5aD+yYDwGVyv*%~uf23YsVBE^cc!&XC>R-IUM1wNs8&k_>RJs09ku$wEI<#0g zDNk^EoKvY z;HSiI+OLv)f)mH8^QPGB7r`J9`N44VyPcMmpt>2;wtFl};QD+9)&NVuSBy^a)LR6O zNjjs32ic!Yac4cZ|I+r^VI}dZB-I)rQ|1onE9}!|NO@ZH97Bd4ve1On(~X5rxKy$(t3J&X*y3$6Lrrk<>D+0 zv#W%h$*i&#X<2y$m>;Pl4>7WJa;7y(oSVC`iTd&VyPqDZ ztCw&C6@iirpaT!(h|_pyELaF}KCV5st~n`mvb3_w&dkJwB@6p-L#%`eW26*T^PuGY zn|FWiRTQtmkqEd%gwn!6?wmdUUx96aSS*0VX~NRc*%_*;ps9_{c~U_IvQ-jfpS|C+ zTY(BL#wb@nlo5J*^Wsj%H$>;0)rnMOVQ+hHFd9PkA#mfa?0jTGH~TDq-&(IiJ2LIn zc47h!*V}ha$u(TTgeaojFwCmcurDE-ErmSJ`#U^mbWtkx{yISs0Tu8UH2QD3Z*am> zxLl`pp0S>iE}?|}0VbN!H@MBG7jA z4dJ1uc9XLO;0BEm4RSozUAjCp&t59B-6NBi(#Ug8b^mAo?p2a5!!9g?h$udMo;~~| zk%2^ugR@Jz`|HhRM86WKpe{lGmK{FMLSE68%jxjy8bJK>pMu<&R>F(1J7km@sK^V_ zp<_4ySI7RxE4G&lV@euS1-N(q)&2cj%P#b;D@QHrC-m&U$=d`b_jKR2-Xjn05b(?^ zm3NnRT6~W4MttmDg4zlb`TOB$@iBL&Yvt;HH|=}SwCCu9;O@cf%fm*>rQdsu+ibMC-~fMx-O{G-Bh4OgW+G zru1W6cfBu2BJ_!4i<}V zJgo)rjR@nj*iX@~K)MyPosqhhbKi^BIH6Hyq%7g7hh)TCJ&n&PzAI*rpiNKigEsxo zf7hl*9TKMdmdUi3m)#2xQHjzV2BqA+v{q6>U%Qm6jQ^&dqwtKidLLydr<~tq!W55y zU)+t9>NA{b{ZVpA^O6ol^RkXgEGadEN=zUI_uu($VM~VLvkBj9hc?}4+*t)^b4A#S z456n=#2j+#fN%S)8Zbgwwk0Ws%yMM;^5P>?M@C z{rgw5u(ayiw_=E%-qdr9ioVP{$fElrOVFOH5d#4Gzsc?L=!U9wj8VL&=lk7%{W7Xm zr2o@u(&ArfmWb}A6L~E1it}1GoVm;v#H^b)R3|T6oi4AMsM{{$2_AoK^Rl;J6UE!iunsR7PNoi>>Jwl0k{pf!?C5=wU1KQTa~ti)}M>+hfWZLfgqv)4W2 zZGb3Hub1tw)ezBUzEfwUKT`GHR{szBI^)j47NrR6@d*MvX*!K%v4b_LQStM?a>L{1 z96#ko5j?`ocM8lg0|u;n2M+Y^{0BLRl=p)xi)a4SrH6~*LE;8jzE3lTNOR2eNhM0m zBRBISHV+0z@2I|;QDIt1G=M;k*V_hA|SD=%nRAxF2V&uto1F02C&pXR!%5s%WF&+<1YTeAsDzkdnaM+|PBS&^&l7R98!ur2!tv^ROE(H-+)?j}| zrq5|D=1~ zmFeQ9FQ^$Ep?s(9ehV9eDC-SJ+fTuY*WDfbq_<7+^%J7ttDl@)Y4IXL1Ctw0edKBB zb#4Tln443513h1?T}l@!VtfHSA3t1u|2 zbA1jxfG%s>2`n=m(hs8&>Ld;q>0D-AdZ9M<9O{?Y0@VtK6?q0kqLhaRHoCP2hRKgm zi}#-1O7XPi&&nXsj}rz-Tzc1;L7LNAy&>Rw{K2GKN}+3QXM1wZ2ILN;!h&hxBsv9bnCDm@pSZ)j4FsioyFNs(jaIM4DJqh1k%Z!c^qs7i!4xcjKg1lXSwT*4&f5b=o{~I68^}pkz`*r`H z-uXx(DhHQ2sBJDpnw83MpkjtrTCHVy|IC%Zbqubuqm4k z>zab&O)gNw1-4;bzGS~+@8K!=vZNpk`daw@%e-w`*da++A}E}ih8qQ#5XsJ=Kjo0( zp$2sHKtkJ1IFY}6>qqzJp71#CXXRqE#J&$gN!`&5_FHqbKWu)sgPi_dN5;=e-Ag!c zpcI_9jYx_0?>D9+4~5?A-RugGZ>0EvzOeX8fvyAOufrgC{6+N#_8&Ga8JeWP!)ev; z)A;F%J-r0C^~x)fH%~^eE)yow5CuJ-B`k4v+t}kBateL&F-0)YH$e}aOKF3_ZSyS~ z&IUD8UwismKtm6NCrE`<3t}g@Ol)_5D|(;Qn@Ay~jW&N;d>!cdgG7kX;QTM$>aGd1 zTA9HLTNA2%u`f*|{4e6pk?-ST;vF}ZwH@%jWilndyKT;mXfv+45hjM?zmT1G9B>u4 zt!33VA~wap*sSnyovXOfnQbITeu-ePS&ENxIUSq2Wz{kDLKj)*Ut&gHS8PxPIz&Oi z<1Jrc)rW?lT3xzJiGN_;Jgw!V@7y@1)e_v9k(HCZonqq^4L$ZsTFGLH%PgIcP^jCO zPOfM!HWNJ<2uj9eomBSR6bw}u3%1+^y}Wt!Ys?Lgt&$7Z8rFv^3CUYar4e4Q=lRds z8wu`80L%u>JHyuZFWy-K)FDSlZBSRd?+P;ls0^*d4397E?%N& zF1(o-U`Dz=(-;UMW|_`g#2`ii1qEwSQK3dfT;s`p$66&~Vv(rYC6Iz?@tHxuTiO}# z6`>g~8}LKOtE#GIWWTq6^bb}UEfAWVRK|dYF&)}9jH;^Kai2L1adCsvmnYS3iCt#t zhFJ&OQ))PuL>UR+mTQgP=Bak?<6xRnLC|2)(tcJnU$y#)-hi=BcR!TuZ7AtUSgMo+V767r+F4Nuh z$i_igAI~eVk9c1V#&k!kFdb9=5BfnH5d?8xT3mNjXs)SMxV8kvs;iW2|G@ixmA;fj zkh(SO%m{wxd3rQM4opJ($_}TEx$~GSRgdo7x9RV&IB=umsvnhejg-F14!AIhQX0PT zUTaJD4_jn)b=AA6q^bC=eM*No?yHillxC7Lv@oybtOu z@4FUPM~|}Vu?<|LyaMvc2F4QXkx-RFNNhZR=KgUQF-O^VS{jkw!+v7_YE#w zKs!O30*^-XEey;s^S0l}aEY#6MICwmu9KIPgz%eH?GP&~E5M90*B(RDDO5}p;}GOx z%>MCB+T-%-DHQ1Qyp z&RJ@S#{kmPz&m*jIgq^Eo70$Zz*d>8vwzUz?=@;YuXZQ$P2t{D94cKXxZt>wvnhAmZ5lW6@5x zOx4b8vtnPV93yp6Nj5)Wt>6Dms|T;X3q#iYXV_D-mVnBPWChOTIdrGE8#&aM6xI62 zYHwYL>SH>+Xy4~?qv-a)2Tm?{YUIzH@l+l^=<5C)$<&vWh%mEDB+qw@K7v=TP9Tv$T!-$rbv_P&x{Ay?3 z^J3v(@wL&QulhsK)_s4(9UUDx$&=uH!HYaGUtmm`3@`@fmL&L(MCy9f1Gx5;KahYK`q$qF)MJ^M8n7xI(f_hgk@C5*{_07k>7C)b9OP`{)108T$XrAHnBL5zsmh&5ediXiRzYZAq{r>cGEZKcn?V zt<7#NPa!b~LnV$5qqAddrh%x>0ZYp${K9n_Qd}b3tCyfeX}D+&wEX$P`A21d9wC0< zpyooDL?)zuwp%dK&)br=aSZT#fy;tCbpL<>EUVI`y9bw(gE6=fi>^lWu*c(fh26<* zY`hcS+dW3*g%vnGFzKXIYCmc|IXOwH_`Ic!Kq z?CO<=i|5*2XnPxrG^Ugpr=Uoh$kB`oTC=E}E4OSBE-1%A`fJ*sngh6&i(P^X0;=#p zDA~4cF3!^^1zn+I>i+t5jy?65X+$;`$cV0RpZ(h)+}S3$*zp0wAX-vAD|m(*8VbG9 ztv~`UC``T2N2rN$uezbaOQ5fgRJ!Z;8;MB2-$NKzNsEViY&gRGv`4JbLDqt~D~!5p z$q_YW;!W_x!QndK^uU^pZ#aW&2&A_dpM|IZkZs%9fqfnWI>xrmQUjTwu8kZ}y$QcO zeYm%`Czr|{Ic44W;qBYYx4wZnr9P{8lP_MKJKzSFZEf=FCo ztDgpttTTk|SBdxeO(@n98Sp|w4UG+-t7ti;@+aTYe>aK#KVYc&|KtN!pm)S@^!}?Sbwf1yzy%yO4>5y| zLHWI#^A&G z)1HURCyE1SF8_x-b=Jnk;*#=Z(XNptsk(@;cDcKXna#Hiq#}v#8ha*96}g8W&{ysC zgJtkqfRWS2uLqxE--v?ehfifz&dQ7Hh@Y%cv;rQ$6COY&KO#~6N;8mFS-Ric89 zw=vs=9uK@yc+||#;a-v9R5Fn_qM;Z+Dfw4b^6zmD(jd=UHPZq09r^2#Bd@pD&G$PDydq0>-s0p>=nd2_8{F&W7}A8k-JqXlyH}5}`gG2jjhi z2fMYK9Kv?n_v)QD7)XNW_uM}`Gt`j}7 zoN4b2P5O*%@&E}pFq6p%H)JbOtf2G9+gVOuB`;|_XP}e3X}iYC%P8v20ec4kVfFyr zJfXpOJ+=nH2&C7pOQx^sG_H&s0p(L}=fDpKwD1a&Zs>l&SRtJNb2L*l<7M03aXaUY znclY)EAw{sCx*2kfG%k`exi`L_W8BS&k^hkvPz@(7-M>CHOy>PzME z-QV9A>*hCZAFuXeeAq@BLpweGy}iWegar^5I{q5N3eP2TZLc#cxwdu=ymM6AMJ&?i zAn6sC2Lr~f!0@eOO(dW-Rp774Yrfq)_#sD{g#^|HYCe#9-kx7tTH0u>dIMfL`Ym?t zbeM1KMD0PU$R!X1l{>9H0%xoILO&E5k8CEs;PLilLafDhk>&?(yUQRRr4;Z^9@F-T z&dD*}{CxJv*>d*bZ}&a`jzJ*tLN)bcmLa8E+cw6h#~K}R+xFz-zfxKIjGe!CEv(NJ%D0}gx!(U&qGK9h6E5lfEUdah8W&NAcB zXDp7ii{imuEZh@tD^K(~A=oOi5ez6^`##G1yvd28X4;@inF3INzgA z_CtKX^W*2vo0HEpXuX zjI}lgb^M5%M!mF4cg2eR!K?7iw6;i`x*WaLT=^G?Id*e%PlYvW-^azNg5^U7)K-(1 zFC~&wXl!@iKs$3)jTsJReb~LzN)%*AF&|{nquA9)Di7~7XmKMxn&nE?l}~Me$d$D( zk>B_D*!_I5*}J>R>!cQr`QLTIpZ;X~|IaK$0wd?Xf#d4c{^0uw!0TOV^4J8MJ&E_{ zgh^#5v7SuzB2@ql*2Zk^65?!aTiDo-ZPWm--?=@gI`3SY$LHw>Zh2{x`sU{iV5;xWM3snW!q$`FI`g+Ro3V4bY*eoCTxYB}o?DAO6j*e~e<4%@DO zl`B^v6WrP8=M4+P7k*hD1H}aB*TD%CTEF@ER(ydAp)?aZX9b+`nPp``>+39=4QC|R zBtr!)1d?qu7{l0~;yjg=W$qQx?3g*jzLdc4MGnz1ZRS;_`b*^C!7w#5qbCaDXfmV( zKf>pW)Ozq@x8wRQF{|Fd53F4a(_H<%Zg}*bJxvX;vHDr}sPErzf=msZ=;?;99=g@? zgLvrMFJr(4^;lS^1`VIXhhAM=z!kW-PQ22AQ(3dqni2j%5VafR?r`*I ze{*`!_h9xJDBB?rrqj5>?$ZLtSbt+cl6CT!$;lsoDW>k;{x)s|fc0+&R}4<}?|_WP za7@~B?T3};iRNs}hW(yfRo7hY47U3|%b((0e1B1~%pq4k3;ovzLXS274O({EVVg+- z>%hOjWmE3sSP|qaKSHc$w89#7Z`D~OAjU^FzUbE(fv~7dQ16mh&F^tbRVa7m1A*EO z%Q5?$%x39Kfrl6BS!((hHJi35ut9;-ok_@sF8C8}mPpB`-a68Jfr;qv4*;FjDYK>x7od_-^kXpU_}y;ur1#_Ws46Eq;`*hT!x*NvjaOgQ4)BO?v7e??Ci+=pHt+|=~q(+)JQg)UTL4A z;3yjZ8br*P2e}(-Iv!Y%CiDb(*L}GzpiK{;=vud0AvVS;ZL(-EVqszvfFt%~St27u z=kAQ%TEF1=o@4~4x9>jW17+n1b{gn-BnWvNaJda*QF+g4V-%`hSK;CD+=#^f+C88T z*+ZX`<(u}}$7+|BDIkF5blGKayWHwx?~tiW<#`_*mSO3NZ*<-_8y=j2&s= zo(wHc@ya$Ly$aSZu&-~&i(EY9pU?miUQhG+3H$xoYG1Gc-XjX5xzs!;t1?;}KgxlN zf9G)@L{(6E9eRUph3ZQr4!CQP>W$8K#&kUJM2VsLU$(jUWAba+aOCIkmnen!3a1nN z;txX6zJd6}*8*#o6E%PrOhy=KvYBhc(*^B4m}<@VcK+jUjte60DD zf|xPHWX5TX!)3tIQ7bnmCl0P%bZROfeRX{)u@%MoJcwr_PIckNfo%heaA^f>nzI#< z>94-CO{;tb!&mcc;K(Wfmhho)AcA6OmPXC`xpkk_)f~qEbigjvD1xO21gDH_ZrNNX zx=O&!2@yVsBYX>nM~q*4IGauPBFC*Bb%x#XEw*?aFt&!4nUP8?_zgK|)cLH>3}wfF zbVtHj%UXca*;t<4=wx6TYjUc4kUF4uW8uS!w&7%qH28Iv%Ot7MvL0HjRkOSxx1^lz zfKa2GH*rmVeZ7qFC^mL+$DK?~aKF%qqkqSSjuz`qN(yC(;8S!5ejpM&|5VAVe??|cC&W?lp340Yxt=is9QZX8*@{$u9VG#Qzj>oy{lP2LCDko&339 z-4BNA@D0;Dri7ez&ZU{K4JmZ~#ar-9XlSe?7ymK5r5%o4KRuJ1&gxdvG}4ZDsEI-)Zh$pVbD<@TFC7awrGf(QiW41|(t*T>p*$92Wp2Hy z`_zK%KP`-*q65Y^Ua;isgkbpR+dY}w`0B5hhZZl0M&*wivSM%t2fJ2w zfRVWcX>Z__-WhDx9WT{0G%`|B(MrL&TQUX)SN6Hv&8K*>@vJMYCrHdow{8WxfgL?4 zf*J&R?Lov>e??1zo>AODq9WUqxwf_zt)+b7SXX2ZL1p{Yd@UiX*=pJSyZ*cR5)mj# z3bTxpYN>`>q8y|$a!PiGI1lLpAdbw^fgdjvA&A6pk*2A+ zxv+spdvPsvTxVul% z_xEz(0=L-r=>{FCqHP`CF656ioSX-qZs-VgBn4(*_V$e#!48^ytgz2`2yAK^>@v|@89(Hr9 z^;}C*C04uor4HKZSh0-aI{k2(FIK{Fs05xO@x@L)uJY_H~JlE1{8_w>1 z(k?5#z!nOp%kIG+t^G$#EG$_~O>clAhozhVKpsX+yp0h=_JR8=>dTieO|0UwZa>z< zx?ke>edDt&ecO0~&r$pt2Qg-5gVZ&cASrIPW=kZjtZ~`u)I{nhGVoO8svoaj13C>_ zwf;^-lH20Oftkg14y!+g^2vpwBix?a>`;3hZDrE;rShjh2#e)|sW0t+(Zk|#zM@P9 zj)32z{FxTC9_%g)RdR*CW{HrRhu+WCw0(l(b-aAniW>vkB*V(}m&}`X`Wd09&mOZ3 z2iiXg$s%Z>G0ny+F76L8E;~JIHpHQwTSpC^4US}NxzW^~NKKl-CjJ%YdJr^R8x%aa zJJz4_taa<~KvPL@KWbS;+2cK+U^`!*9WXw2y>t_oT7u@=z;*V<9;91l7$gVY z-MAunbeIY6!@AMv5(1rPP!<(iFm^ZlS8Bbr$>euwI9a-vSvAQNBf>k((;=e@d=1uq zgfCRaN?m3zHJ$(VHHmfAV!KU7W)_s|1hWmm+FJSjyBN+-=ibYr^Blcug&Cex_;O~P znT{_rx?d{POuG~Jvlf}KuElf{gVOf&ci`+|?AYu=hnjX*#u`AR*50nd`1N<-IBv6Z z?hP0=Qzlh=g$`*TY98$AX~=SePbUD38Ixowik&2(^YyddQU26y%OdA%yi)fd1Z%r} zj9U5y0e=d9WwFva)Qmtq3)gQv;`H|aUU7$8cgU$Tgz48jHgXC5yb~)rUyLgvladhk zZ;FmNtv_OhW4G~7W`Yu;QuA2HwnrDl(TI+Kr8kqVe50T%cKF)vYHeVAI#v^8pw}{3VXhup?dl%^u*(Q zvu|vABpFF$Mib~bxOe(s`U@n*f%o*$d$G(Hlm*6pUj;31o0=O!mWtIS;4U9&de()7 z$!C<^_f8|A#R4^dK&OPGmV%!PEMACagIx+80);NP!BcXUu)E6*_ym);h;|7hiXRBo z&K%>r^Ej~JDtEaZ5p?9iL&L-GXIBi`ayZeb28@y6qY6&~bxxUi|BB~MPzjVzKP+n7 z=5e6LIBcL|A(1T^t1EVyo-Muik{eEGV5!q>aq3ymk5&X!(LFd=NzAOx&gBLbdsBUweP;K`S=8L#tVY(DMhIt_0=yWUBnb$&=4 zDRpZ9-8!85$&e|Foj6a7G*i9%_G%DwpaTL-5c1G(L$P&mtOX_6QM|U1g&K1>ioPR3 z$Yxs_q)RFuDnFcg2IZtt2bu+;B}Bt31nS-KceK?WWMRK@3fx}0x*$EUvd3XG?AL1( zIJML_96D;wZ*w1yUi6)VbA^aQBG=kjJ-95I4mNB!oOOX+5S^E zyL1;fHC-z<-BcIZ44|g3>8F)TD}7e%?+6}Ihjtu$4BcER7dI#?w&NY}oH3jA-i%H3 z`A^U5@;CQGlk(Evjnw64Wxql6DnH5_o$}%RsJ`Ae0=iGQcTtx+^N#tJcQMZG_@`#(QAJWCtKF_=usIay4&>3$>!vLk z>VTu{tW0R21|Anw#6c1UH*tHF5Zf^YbBSL$TA0i~d=(I)ky3-2bzlIlMV0j>I@@QdRs&0fbYf+s(BPS={xuw{icWVp#YIHDK}>0#IQ zo3205Cs%7?Gy-`E8uU_e>K8}oc>KA!#%q0-(6rfns)d{0{9JwV)ev9Do{CxJRTn`JJgRnSU`~%@-_M zei%vpBs$viYQ4Lj`^hncL4MGy7K~0Vo{h|o`OjRJyla|BGKMU`GkIkOBJjnnPEx4>C+lMQQi+e5u_^;9E&dR8e+P-SfY4U@GK|c8j zH@Q(;CjxrO+anxIY*f8YV*`+3q3T&3^|xq;5u~U9^snSxxxVEtgvs`a2Z3gtL7Do| zj2x6bHeNf@7~n-L@C0j|+=wBv$t&amrMR=|4;78Bx;l4ZttPZ%iIzJwFPahZW+-gy zUzs30P7nWzD^l<7{zGo5%3NVAzY?&vqF*sFUXR3BnyPk~6>?cPIKuJ&;<<}r1aboC zWG8T732QdSfx+)CwEBaRd_??6%w-7iLAS%;4eVG$C9C*M4-K{UjHXpMj9Gt)yq_s? z)3$4)26|%fP(HG2*v3M~N&+AR$U+6QYv36}N0*>;P*G7veTf<}_eu2+QoRn(gyB35 zW+6jWO8&cL!ga;O_<``~YDRZJ;eK?sd%_Z&dfnSK{?8m0|4w(fZXK9637n^?BA?JsjZcU_j3y{-6 z{l<*Ej7dgmMGIpJBC-HGK$@!OX*Z{QNg6akAqs8(w#l`{qMrJCu*o)`v;Tk{GmYVR!m5t zPMBt^!OiKp=OUG@fD4LnURo^hOj=G=hgy`R^tv>kAs~YFt0uBRb_qr7iR!otP5;rV z!UZJ+1(kT8Y5pkI>Ixwn8RAI+v+xe2Y%4>S)X~btnGZ<3DQqzVVMnKC)&2r{R^X$+ zPR7K>*12Ji$pO6|JaP*N@+zyVQO9dG+rNmzxjbFH)8cXnC zoV|`U376;r$SdbdE*5fO#pcMTer-PQVt?ZrD`6o^K~tt)#Qo?|ncWTvxDJe=)?gfR zN`YimYIcnP!ngVP19b0@P$S0Uf0Ogz)=_+YRiuP|AfxXZw8P_$#74sN~* zn+sY$Lf9d~DOPj_Ti>@C8W}(55KK#{KZuHp>q$GG6Oc>fO9iIq(8lK?obs__0$KJ5 zk>(Se)|It^W;}G4iu2j1)e{(*w1x&se5(98baXqP_bC?0J3OoH@f?g1E4e=BxoCJT z?EYMKybcmMtz0X5)lv!*B*(C?fY=u_!JxU_aml<00EhRC8&c@++&hV@pj!abIG94B zppYaA8e0Rig+T%XTRbr#3X7EH>9p4S8L%5bI5FX6NYdV@nGpqW9;0T~{d#O{EC#^V z6U(fS3%rwJ<5Mse9bHlhpfqg5G4e^c?Xuh9J{x-AMFaWAG&5|MndRH}!1SrCq=fr= zWL_8W2{h&b0)*^3mY`@Ah#LFJUqR&5G?I%zE8Ag*wLhyG;{cM&_f{a>$Bd-7_6I37 zWi}U2L7veanb}3E!-*f><;#tL#^wI~uh^h))~lI-wJ7GrgJSlDH!)C;2b=zVCMt-^ zG9K!Z#lf0{g96y#C#R%ff&uXNecO!^k-^^nR`V+S`60He@t5ulgC^-ON5@J!Kgdfg z^%&F!NFH*#K#B=f0z_5t@PHAw)M+|mm1+p@s&%~ut<*J=42KfR6DaSKKIAO$cQ zPJ1jUAHT4xbAO5hbShAQ>P5xE%m|knhM}qvMzkV(aOH~p>}yDxOuR}`a0QWEe7SVW zGKdgaR-Jn>yO(K}D0MH6>Y3Vp@&RzohQ`JibGGB4a1ymWW-uP}3o7%_m%xRnuIdrq z4LE^~E5KrE`}j`G&G2k!S7G-8Q~yu<5l=LcFtH4rCq?brzNUL0MHUk=^@s&eoj2rj zB`mwufN9!tsx0{8cxfbr@?kR21bT@K^#|*+mJrwasGz9pfpoz3Yca5w7DmS@-OZME zb|!%UtHLwSJJjq)ernoYDYvyx=|HRscR?iDuMh1`+3(B_5T!`~%+17fe%LzQNYJ}^ z)P1Q+N0tc`-hBy*lLg|vP~sf++xT?Zc%J}5F&UdseWFVxR7V)tHj_Jg=L6X)oO$`? z=ETTYE4Gy)m)o6d!Qu^jzN6-}Lad>G5?{ibA|BbCcEK3omX=1*A*5N%@BLA)7f8bZ zQ}8Q!Y)1Ly^#|#lYbkgmpnx)#xC(1a@3@jl?mn3$aD($wS!yTqwvgG4I-_Og0@^K2?AR+uz2XWtcWN`Epy#^b7J>61%4lN*u;od zSnzN=Vp z@g*dt!WkK3QSzZ5x?41>k?}ASb>h{RpxqOd-TSq_UvKwQB+I!W88rKRT}5rDdTr3f zVO$JhJ#i~z7%}8x!iVA4gg5$OQtH3q=Fw-e!nR{ zI?84C#T6jhXz&2-B|6Ea2nOvIbHpp@_oO~$dYHYgI2^73iRcjQyi&1a=?iHGfIhJn zS;6@o07h+%YEOEA15GWiM?^*r08*n-x6TF6)!o;p3mh3_y}u|DxEchI=EQ`?>DlZV z?>asC(5D?ue95YM7_dT0l#x=_zD zJ>n_n^}9kmu^A8jT^j+?xDLVijIjT*92t^<;s9d6;S6b66t2%p8(W(fnDu-s(s0OG z(y-3}^=k4u3wSj2gKF3>&Rv>X3m~d`&87(`3phZ}e|gO6gER)?)SG%FM{Ze6g$I01 zmr%n_sPTuOFccnYn%HoLSm(G;VZ%HrA-miF6hP*`Fg05|CKEkzXPOU%dJzf4(%*p$ zIfK>m!P1v3xD;`cibJONP}m%vXG4KFl`dPGU&H}b1tJ#B98K#rCzQxa+oLBryc?sd zuB?ho`4AwEtWT1;eHWd}b}~%3dgPi1y7DHM<&%}fbI+2KV8Y8aZNnCBY{nkR7FvT# zN@K{rCD0xH19WN-n?CmkV#>_QOnl5qX+(+m&NIMuK)zw4ru(!Z{?*4uA-nAF4(CIr zF_5&OAMj>&<(X;5+I$u&DI)!OLT3&GhLW-pY}$O3VeO%nTvb;tLnQ+t;L@lQoB&aX z(Qfbm^8CJ>va<5Rz2AH8?q^;A(*&5^i<{*}Oio_r(;9Hq;zT7Sf>tSQ>>qrPg#`sT zQ{sE2X$YIc!I4e8)A;QXB-ujV_Ujmc&j~|2p`+%~8Hihf>P zonAi(+F^okdfdmB(EsxjTNaj}@=)oV)RiqcA$ZE1eLgB;9yea%vEJ z6~5a06Ei$Jwb-{*_P3)LrVVuu$aR>PaeTZgsCf0GYx>*^FD|N@3I$0UIaLU##&{&# zU`x%__lDE_w;BmGorY|ohmTG84r@5!TkzWgc92(?Pf?x{7E{1HQ~w>3!2Z0xQ?^|I z5;+o3%l}!yEo@!)6wvXpLjRvpeOeJlU-dpxTTCS;%xDPS#+^2K#GobRLXofY_2}LR zB!lW!F>DlP-uLbK_MrFypg|ncnv~?`dnvacFv&8h?7hvvy4UWNx0wF0$sbSaxvUgJE6otV{P&2Y|32EBB7)W{ zZ&4lXFx`j(ln)&5QA$KX5)b=JX2g_aqyZw}Q*h|roYnbV0mir@aD=!x?j{a!;ARYc z`g53xOO9D=6>pXZ=PT?Vb>~Y4z1L_>EzL7>>H?sUN1dGAcESi0r9}&a+}$5TDS^50 z5mHhqAA9;uPChOq0TvIJ(Z^M|Zhv&JV{Z=+%{76eO&F5tUv1B(Jyz+0(Liz^1S27Y z$HJzmZFe}YFHzBb--L&I8$|68a<9>sEWA-Tn+8)18vTR8uLRn4U$Sgvx8H9(?D*CT zXVp6)63Fe;A{+u2k5_`9$1s~di3OwtO<*9?&M>E{tt9K;ZQb}gmdkr*mkSN3DAF4s zh`;l4ZzbiX&F?s^9eY%<%RGBV*X(`Ff4-!15zRZ}9)DZgJGA+t%V!>*7^=YAJmLMC z)#b(;w@EuEgoL4cocLUuoRgE&`?9H=Rr9DVnB5`2I82IL2I{E%{QN0>e*HlDIxQSVrNA~CNQ4VB+bSG< z4;C?J^xnEAH*)XhwM(d8Jtq3PVn&&+#2i3?!ERipj`4<@zEu|z9&XZ#DaB{uwarcY z2dg*h5kqt#&X^8wye`LAkLw}}8!oq%pdsO}Fy2iR2B~G$1W~pn6Fo(5HOx@D1MouE zs^H=S@z=#>fULl$e)k6Cu$Ca7$N;;xi8T7rw+f6^WONF`!$SZx&rVTzXiO#`$Lx2a z_W(BimCGBHf-hPd)|R)?Lk#=~+x5%ZRbq339JKWy0K@NF=|th#nG;hFJ=t?mwqt6K zar-$tKjG!(F5Ta80;WZ`>LuF5%VjJli38;(TI)~28w*L+XiYfei;{zdlzq16Up`^H zonqv*q&JGxT57W`$Du~ATsC-q`XIG}BHY)9u=zn+8OtaS2oB_eL#}obOlSb>q!<*Y zE;HWD8Xs00>bK|sz>tNZA?%IYk70-x!Gy+#Mqx>r?){W{jT&!aI4{vz#zHX8z*&_6 z3Pr=c6&>5Pe%>fBW9pHj$EK92#|T*0`*(IS;8W)7zCw*xJhA|~xnk4;+@;K-5ZvME zM;BQ^RXz?vNDG^WXF#{Z-Q?rBglAoQBmv!}EJVIG%8N}yHB;s|VFEQ1gn@mj8tYrG zTPs#<tuffz_k^NF;w7+ zPF7xC5MUD9yIg}xz}m$9P}TN0LjYXGsr_Ib8Cxd>nci?$Gax8u3vPZ$N@}|}_Bju$ zM>gQSPO0DDN^3r4h3PdRFcD=FCZg<(G_SnS60)wj9z6PXRKIn}K4Z;9tyid3=D2bb=wz*_->fR zh96+IU60mUJ5d~;Fe}FdKl=0@jD(#JEyp>~`ORREKAdYq2LTb$LQRRO0-`lqLLW<3R2%^!>^=R0>mt%I< zkA{`?{M)z@vnuFx0d%-XfR~*UFTZpFAPaiBnj}?2I7k!WGenJN5~OLd(mWmE*{nNL zr8+ro!=VA|X@{)v(m1NemB+t0ZN^Y2Uy_EZw66GIG6%3#0RfF_eIE3{jxisUG89(I zj0(SWE*9fWLXDylqrQMPqyP3AFDEe6R9?TmL7KX#rn(Rk{hk4Iwztv9?cl}wNngD+ z8;m2k*eYQQjnEm_FvZ{p6|K883i z7#Bc^FJRCa(yCwfTvJo_nHOF9^LL(7r3}BvATwP)y&%3c%V=dw2m0Svg=n&@{J|XPp=&s)!<~sz<4-m6OOL| zp-B+7NUbCTfpf4+LW~a7GnijmaLr(jl8~J=o8QOuvdDwm-tVB`?wUQ}LMP9GHTV1C z$2g$Wij%^vAkk`M^$X1XLb#f9Q&RxvEeD>j>Am;UdLR&oc5RvsJ@bwsCM4J^x-pr0%Ib8K5mM~Cs)LPpU>;$&=>sKi?UP8FJF#;;vx$&y4 zXXWoxe&L4QT~S^AT@1tg^Mo^Od~|eI`t$oklQg8)%63PLAfKlkVh6@8VccFgJ$Yy; zc&+z0rv^c-qTcL{Nhc8kInhd46SqjDQ%CvvH9+E1VSOgCtR)f;LsS4s**bb`H@+do zR3@;Vm2(WbV$Tzb@I`z6OQxolGB2W^xOAmCXbYelh=@p4C6fiZ@8Em~s$myqg|jf8x|@@}S1>L0MGnTg@MQB`#%LMmC_ z32PVVe-Lx&_WTO^?2h$;@U89rJ{TAV`g(x>TyC@7WoHb8-VsLq+$9Mv zGet21bqmVUi6(>F&<|a%>+F1_5FdeHdWe8TX~?29L(4mV{-l%$C+}WRh#UGrGWS#5 zE{I7XjnC-7LSD@`VOUJ2d)G`^{S>8?>Vvw~w7-Rkg8-#AwX!;2l#S0~P=$5a0~t>8 z=d@Od3=nE^=yQIK>7psxQ&hX#`|kOM3vi^z-3<__5)>7NpHQw_i_kY1(sDG!;wm>2iUN&lVNT5ao@=Q(E9^*+K2M21 zGC|h9azOhUK-*+|$%O!e`!{pS3V01bqzL_CVB3(B&1>!6*~!U(X=}*7N!@!4-p(+w zEw{#?J?raOaJxPm;f8*cNJZ#vB`?tC*NVOsaIG(we))9gExTj@|D{GV|4L!*3 zUp?P{(+&#J;D)?Og^@~1Vi|3!!~VM%WUia}h4oKp{AeD3yy~HJbE)8cr#=p=_bH=F zIND^aMW;`$<7JE)A&xwo(}bM1MQ8i`rVs0V-;3Y;2{fj#7bhcM@Gn>1>vz?XFC-DF z6(w&m4!XT*5O9>;rif1>+KyT0F|E+d{8739=e{lBJQBk&0->89zN=YNqLrQlEiquGn(%ncmNGmBI zQqm<2LkS2-gNO)7$PiK@EhQz=aQ67d`rh@P@BDFCK5JaA^~^B$ecji!_iz8g|1FEG zT8r3=Hq&p!DPR+wp*@(bFY1R4awFbYh&2=o)x@|!TRcZj%%z|LsCBvA77_Wk)kp4H z8TPaHg#35A=RWULwB|Mc=j%`Sa$xR^#`sFH{Qgb#Ks208Ji^5vSr;Y)KG44g?E;0> zq3avZ|F5o3>0cVtD4lg6D-lcPf6Tbm!*%Q5g4;D46YqS<-ANV75C5kLG`L1jdU>fb zs>=OOcPVZ7e;S=d6w03_^g1nha>pvLUA0Jf4z1rq(Wk592`%7(RmN&X_3FM5#Tats z#((n}Fq3_7fj%Z##4TX6Cisjaul!Z9*y0z8Ke0e*nAR3&T?ntDH(~^p8yc%|lzQFT zVld*95;*f(?A3bzrM~fK<`$S=B@vb|D_qWd@di5?9Lr)d=km<|d5x>-roTp;+z+W4 z(!w@ZxIvGt+!Y#`Z>`%Tz+#aTJ`qy;f{>vyBXpwnQqli*gT8Q0AsB4hLIpaWT2fS8 zP8Y&syx#R%xN_|tsiLsD%ktEv7H1!Nuaw`}cPSc%tl*qTE5P)orj>8kj)8ACURIFQ4tU z`iFGp#6uO`dNy+n(4sOSLb}XS6FJ2Gfi;3wnoXj(rQ|RG;}Ix}pa*+LoPTvNm$v ze7V4fL*%iJ{NW2r++zM_5$ck~xx`(UQDw?hZ1pvKdMrRyA$vH#y!@>6IgvEDx^(b> zwbWR5!SefU)brg_4j$ZGt(r^EM>X7yDYk$2LK~UNjB$T1KlXdBJ?1vOxu3qD(mQI9 z;Jnn-ka*qtVPHGBAhSa1$u<+y!t(Nd>SjuSV=8mDF(F!DfOnwXcCuZQtfJz6PcIw# zVX#0OZhZVDDX-EuL)%{4n|*JR`OXG-=8xqd9LoPln@yB0j%n@AxcA$eBWF7GL)gFs z0$CrLaAN%8H1sdvU+TK`=!$gP0x}+g?Z~d;)0po6p2pbV0A(vbi;D%)@_@)+1>Vdc zKWZzh`|-*;wbZaVF*Wtp6pgU3e!yKuIg%~#g9b$x-EDjj<8>}O+fq1pcmvMxAf6T@*#VNWGdO^QvIGVJx$oU>{Y#Z-uos66 zAef+iIBT$VuGhDEK5JNy6)Xl|)Xx*CVF+U|R(nctjT&hC9Fgi0qOw4iu}} zwGxuk|LN}hGHx%QPq`bsBOsp&l=zObU>QY{=8CwG;dZSgq+4L!wgwMd;y1M>xmpCRx&9@3j^&G^* zoMcyg9GU*h#+E$EDJrc}*c1%BFHI>foccFYcsF2vj?ptmqjjjkeq#Kb73@gVjSuq; zME>WRmuYE!nJ+foc1^D9wy@}tP);qVT#2gFKJUS{94Kd?iLN#~R(X>b*tKSYrgBu% z*H^MeUZWCn$aDFOyVRG~3w4%=#|hS0g#n-;&0hhT(cuZ8>4Nm`h3+RO8#BHc(56-| z1`%}k^;vABj=)GeXh!N3H{{9{@M`woKQ2Tfh&T-2zsx%MV+8~O_B&Qvqm!G1qd(fm z&W~o`cML(>bVW z)o>_ozp6f*_S9)GzsApQ_3m(bA3|a{w0W}n`?)+ee>`w-aG3C>p`iFlFd)(Ums;Fw zZZ~?~t)U?A-esAq8n3g$^&7OlD}=uvyLgA3%p^8{H$ouKa#OGV-OD{%0jCos+Sp`i zI@_KmO=ilrH_uXo3IFWv?S30A1GBWS*3%_nidUTnV*$rBw7!3C8lCne0X+mrJfK^B zq>-?cNY>`Sc7X zteV?@&lY@#XHL>8=C?l_?m7B{tEY6Lg+q%qwU?I{2`TB&*o>;5!QIo-Q#W__c^9$z z?W3BPROQRVE4L6jmY`!RLiOZEODgdY0{h)J0?0uaH6^?m%LnZk3(=amtwEc)NHXrZ zw3!3j*I6Rn`vF^w(4xYk2UBj_v>$KF%A&$(PjEeF+*veBEP5i`q`$4Ks`{f^#5)Fy zaF_WnTzGx~DRW=ld4lP>Ycn8cuT1Wll#?eJ6f`=<$PA^^eO=h$vyc%JBg}7=`s#j1 z6XR_)wr1j?0j3DF?JG`vwo6JX8Rgl<#UVYE3BimewGPvAMJ%8Cgv)X(Dx%H#x@RFU z+wLi%m=%U+MB!N2KlhGUIoa;VA&!oYSh?64goQyB(J$O`CU{|P8|(D6*wh9gU z+NGKZ`bw8Y_u-MT-TACD+<@AwwF;vL9*NQA{SI^6A_Ee~x2rgAhRd*h0V(isWRrIg zM;1XL8mYqbvd>a+6UiK(F6MqKx~roUr2}o4+ce2d;`r`Q3nbR`F-(*?iJ?MQgi3(9 zB#pSG9J0bh3N#h`!pn7&vKk{CXIo!sVXp1FcgJY%&&sV@-z|F3aeOUD<*<-QeL{W6k>L-#{Wz3b9D*ry|| z-+0+I53p5$)vQF~d#t1wrBa72JRNEh>AtIjHp=s8eoxO(_H|SAOQbwbP z^V|XwEAW{_f0p4hh+_i^dq60>CCsvHDjypd^tC?-6NL@x2H97u$=Z!K2?>0jztg{I z-F5SSrG7Pq_r1xl+`>iyT*i@e3kq#c&EL(-T;9_3{^x)AF`t%saz?;?thilwg;|OcZ7iriYHDUVbp*=0WYiL=;v}I{wUH)Ybrx`N=Efe(i+42V8j2 zm=BMQnNfhzM{zoDP?yv(MMTa!*kNOWjYoPCrhEpb72;&>-?wZ*nR=9Kb=GztdnQW#Rt0QgXi>%CHUBw3D*1Ljzt$RHIxSa zf~eC^x)QB&^ZxWzww1pzi1t23*YWqc8D~Y_*La86VucXmX`XfOJdoFVmq;_JcONBU z`9#-j_m^A3hPIZtfY-NdV(M~87_^;t@vXI(-z?8z{Y8#3)(<~;aIxoBz0&4UDCnXF z<(t4ep~;W{Y7%%(i~^+MVz!Q}Dbd5W!~UZN z9Ihl+)+$D5QdPzjImkLTJm#Ium)KdPai;JUk1i*uli2jX=PSv99nj4xeHzhyCe-+!6#XTJ|WLRWJ9zP~?+|@tL zJ1a=}dGM*YbGz*q1Xq|s$AQUg*4G@Nw!xcnMA`TRH@GF2-);T%Z;$Hjk=%ag^dwK2 zD-pT;`}yvTK9+G|wTZ~njrf97f#c7=rN+*skPXF3nKS)T0mZ3v`pZm8@7_FQe8*re z%z1h()4wrROVaL>=r9|F;!~NqpSxa%QyGlR+I-6!JoT599>xms))RX9iwEqFrQ=eY>vH>2|I|0rAL4wjt&xG)SU@se+j? za~D&&A8Eux-3jh78bg3X`#*^JJzB_?#UdB81tFj~CMYGM*EslT)@5*>(Wf~F< zWxQ8>of8X}%+>!5GdW_1Yitcj;%(t_%i*n7YMX;W$A&>O$wGl#fXZ2d>SNlBzvYJT zkBO1`4!!0_acT^B#qZb@@ESAZ=D7<5rSq`74}N5w8a#?wD{L-F`kdI$#!m;+jIND5 zx-lvHL_z*~H$D{@Pkk@j`9MBuZsW>T3B2VuBnxj*6Gh`^%>0*LbTXt}vUgE4Pgfu? zlWb$|z@h)@ep$JIv!LF_)YLSt9j?d!=c~D0(xG~IxM00VKY5=S#pgHI+xdA#Y0Vx8 z@TXYKVHrYduoNeEd@Lk}^h)*% z$1g`}@jBi%mypY8elZ_nWS3+YmU8YE^iHV8haXN1k-#!$8<7Lk)zSEhM~Eb@v$tCR1ZLUyxuFd>W;U~HnokYc_P*9p-=CG5jV zkAJTO7FfUc{7Z)GD#!8z@W*X1;B(+b>yX<1aa zYkvQ{XBU(CNGc97=zckCK)H4x?MKBLcE&Wlx<)=7H;do8(+`I_;=*Yac`cksSsE?5 z=Xp6poXgj+ zPP8_f;;$G8i|C;5d8%@+jdJC}hbrK)%y|A1F_>?z$8)cgamn68lur4~< zW1VqwnTea_!k3kqx=qPXaUmlIO%Ao2k}o-Wr(EXUv8v>yq?9=~)~9?Z>d@U8b)|9& zL_YYp8Tkm!Ms`BJmaEJZ(Ncf>~;EQ%Q}}+6jQEDb9r_Oph3SscnNY91_jBhz%a8v<@et-t*E1elyr;7 zhj~vl?St=v-ZESUEM34CYX@r5SACl;VdZN$^f8EQ24mj@?BA5k0ks*-9!@X%`T4EP zgb>2qwR~-!<2F53b2cF+o)ebx$-I7NH_cC|1l^ z*dqx8&(3&e&fBA(*`t}!ahaexme#Ofi$J-c3g`_s?Kh?c>O3ANXLZb7(O6i}N=Oq@I#qZI6)prJ8n35C^gdCFgvfOBlFA!sUh! zk!m!M7`HC&%V3}dI)pz~l@1#&qh&goM|3qFRX*oxbKwg`ClCBg8XowOEG-*X>JGZ$ z*$1k9Y;bsMqubz{T5d!)eYja&URbU%h6f)XkyEhGh5~hmQb6$Y?DxfHamWz!9lJF> z^m}zbTXLyW2wp&ZUf_?*%ZX8V&DF7J`dDY^!pmV?HRySJL4m0Z5;dvA?g6j88f6Zh zrsVW=I&sh6a}cM)8u9TJC248nHuh^;srJlfA5f?MOo*!3`SO6kq(%K>~T-@01eU;p%4m?{vz_LSMK&E3ap5 zZI7`X@g3(wS!r!g6expbOq_Zg2|1ZFT3I-??;|e>>B3`O^?R;*SE&u?U0hGnQFnn? zncaZ81pUZf>GcV5ZxNlzdxnNFqkp+3#2P?09z11yf&Oh(PB3xd06f9>Eo841+ERUU zixSn~cM@CwnyI7m#P({T4HYX}Pho|Ww3#ba=M}FvB#VW;#8j_f`5@Kq(4`!1Wnonon-!Wboek_d>jQBQAnp4NEizYGY6PkiUTjBnHLx zK$BB;P`P0C<;pK7F`T373t#%S%`U()E#}}>S+=d#xpq_?V-enTTZ&9)=}Y)6U0v~H z(Odz)*9D0lcAAPk-ogq=4|p1Q%$5a6$Q3+WNR>5|=f8*R&OP{e>-ruzNG0p21s1Fg z3%`$1Cvmytzoelxx7#3!9)4)6M=q3>Q2yI6nD7nBa{S`nqp?9ihCAjxcpd-Z?(7CG z`?VZ(sHu#mBNrL3UEg(0<}U%J^?ioe1$6^P&NAwvRF%Oj*}YPiOAq$^M3dDM-EJ}N zB@qS=#SuaFyRyKo?A+WSDC4(xjU;8^?gl}(dbaH))Ot)4Zq8>Piy%f4bz^b2o?H*` zo@K(u#>Q~RrA`mIiz}pDM~$q0A>xs3_mJ%H0y$3yDC@T^*&%=X z2@@7O7qF@>vVOVo*icu&)`#5cmad4# zuyJy|EuveLzIITZtfBVMvnaYDbmlNq3`?KkJXcZ)H^UUUicKRROcZCax{Cdg=8gn(F4 zQH{yAZ^SjfLhly|f9;;Y)}3s`!LCx%NH`5s+1f6@Tx5e<931`DnR&Tu=DNp+1Redv4 zCv-E9_8di@{UU^B^b-$m;EM|cQvtLXWBJaAMNF$|_x*q!6QO=;8_>BrQu6F{Px#qc z2)U@ox=0)X44DsBlUhGb)Re$rl*OYF5F_sxDhKV}fq+AjM$gUJJ4RKmft>J!DNqV3EAaUv}T3T_&$d<&lk`x0Xii71y{EvB~RFj)Dua8 zZx!4Bn-GpxREmYQXB+~lKEPg>-yGi@rV^vX{x$1~XwO`C|IT9#o&NUR!tbs>DWv1z zp)*y_7(j94R_12}$*bnFvcpo$<=_Rs06XihW#@R}+p7;KhQ7=N>fcJ8eEQTTxAepF zXA;OKidRM3?V$MYv(H%Z#qFSDNsj7Wd0U?!R9|iN^W7v6;~=g;?M+s1w?ape*i-8@ zxM~lt@Am6yIV2HBa>OgJFT3%7-w*;`+_ntghQICRIz5f*Bi;0X(Mx23fBR{Ecsm{! z%@ZT9ti8nl4(o@WVNXkiCyh#zyK}>3Ztnx;3nY*-aTrM?$vmdd{I0C(D22*l2yR<> zS8a1BeSIg;&F$~j5BbLKYk52GCQG3pamVBQMBMGxYsnFT%GcvlB-do@MS&2vJHC$Sck_Q6?>c~W{9;uf4PuuZ0bOan5|0z-DaEat(< z$@{|P#%UFcMO>i3$06vEd^$Rk5P1Zb2HdWBDB9+o=l8ARm6)OHGS{($mFWB49muM0 z*{=r$ZNGQ)HrG-5%ozOEMw7D7o?0e{H<1%{d+a9ZmX(^0;m29C!fmVLWWgLtDJ2V8 zUcA0CH}`$siiWuK^luq8hS8DZ{Jr0s&$WB5@Rj(w$sk1@T6w;N18FED^5vUf4bxl^ z*LR*ib;yN!d6=B}R-~GN1{C0qQzT59ks(!ampnG59_q;pzp$gV&zM$!LsoFw-hqg} z4wdG@(m{8_y{q~?S~rHSkm*8zhxLaFnK7^r1osilo}+M8vLdZ#hX`5<|GqNnKYQ|$ z&JC_+@c5%+IaCTSN6LO)c4rKRF!Z0!qALXQXqNZ7oKVzW(C1>Q;)q?`&D(WqOfTL) zlCY}LxM78*@mR)6xmGHR##0of1E<*;Lh&O!Oz@i5w~AF0lQJH;Pd^Q_GGKe`Wy9`Rvf~v zb~p-Ep4kV*Ow>JyoM5|iCu8ePM}{vj&^0u|<*vpc?gQZbL@=F;1;CaLg?gl115WXjQr{uh> zXFr@u<3Qo>+)y41wRRKD{s#evr1+s6UxsfK@LUpK*RgiKD6cx4Z`2bDwJ8H3v2Jx0 zhZ-Ci1`qi6@Hqd-=X@{#h|y)`_X>5=54uH1PtgnkftqhKwD-r{dK9lead>%ib%=U3 zS4yI7J!Ns_SAy%!*SK$OZh3@7xvsdm(aAklgSzCwz|&yZOI)o6C`RsI$Cj)JJ9K52 zznc}FC%wtK-Td8cx!qWry#J-RM9U@g3UlJzjg-4&kze6LcjFydZ~iJMXbF!O#QR#7 z+Wyf?Lwx`RTm0bADAE;b9a}0kwjQ&Qh!C(%;<_5YRVMr&Sn1YDmf_E1sS{p|#u0+# zbBc-xH8j2nM1jjft^K5m&vA^Dqrw7Eb0=#ZyJnppsi~>>`Q43*!W3#dOKFbi>5;qr zrpn=^FA#{O{*=pYy8+%Wpm`WL(h@TD6iGJF2q}-I{bfpFMeg@7yt@A-?c?UbP*BYx z=B}xvOLUJ$*WHZnLXTD>ki#P|cpIFJjJTTB53M=^d5d&Sf@p2zN~!ex(0K*hF;CdH3tBq)e`$mojGQB7ULIXS(`?OMm`N19v~sBHO3TVubTD zeUuQZXi%T*9H_x!z*SZwX&Iw<5;S697u`|8w4L%1amv9i2=`U9M9 zJ638r`t{)te=B~dp>y87BP{8|4sHJ!vI{`C-QiDQv(5J!om}ed?6mXU6BM$0mQcFR z0eK(tIzNCAWXuC1S2b0{Q{X|nU0=)t@+{QI|9Kf8a z*?3oYVqjPiW=xlC*!p#CZ*KQ+%gV}ibJ~-b`el{>DK?BCz&>ZiY_!x6>8UCVId=Cn zG|(H)G>@~M%ujK*@*Z_~_50$^r`xjQQ$00P{Wd)#3%n9N8=A?;H$J zMwjY{>#twdwZ2VZugeKtEj0+YtnznpU@MtJxz~|JrApFE%~BCRw#1uH;@y1dMHnpH&0x> z-z5LbCn?+?C`Zj@oo#P|mIEvR5y+1`Zg7++CUInga8h~Xv8heX&i>4qIKwPY93nO$ zA*5rLf@$dR(93r@>l_5Yz*qy};*{ThMyb9#b@;PONt2+(CX>d&4ADxo%08{_Wuw?3 zzA@X|gOn!vD#)iGCbS-6U%GGYXi04!cJbl@sy^klyiuxMiL0Tp{j3RCHIVe%X*vtG zX0xMujxfd2cWUc*>w=BlMQq@Zo;a>;!_Bxl^Y~kxE+>pT5xkXnuIysD3ru5xwu>8ts| z)r(G|)Es&eNzk5usZxT{8w%xJlzbz5sQ9v-(3(hgHQrb@f*y-p34)N7IjIqG-D=jj zZSyX3ZWEO{12m46x^N`r>WX_b;w5#wCM=Hm7(4JH28%1n>`jT~fh0>DvR|MU-~DfR zwG~<5)Y~jl#bsxJb$keDE;B9?7)i8VujuL!v4CND>yIbk!wMM4yo*Xs9aWLUYv`k=z6W|sFg%!n`vb_IwQM? z9hGBRH!1J#64k>PE0dV-R!@Ws*=Qt)BmQF9KBbd8WZR&^7kfMPBb~(+7NTo;H@jHk zucww5ir0Kz%2FqBWs{`?I(Kxl2k4=bc)E!+{dN8qi}7ZNK9Q_U87TS0j+}Qk5@sr@qBOC zy)gTwja91NfkIs)QSENYC3=NpFF|ERo%avi#e4~H4WQJ_M%`L{xomvU(#u$Gq^2RD z!FZe6csa8Jk??KyxirLhraq9>xf!&L6%^EQ@p`}7gY9@^$cyiE4JJ^n4$)4kK6tEF zWc}34QfC&1m+{5ji-aq-z-mX3T6{6`bDzn|%b_D&KKbRVOQO*^7{yB+nv^t4&?Do= zrCG8V@gqQaEWC?_CJ5fFy!&TmEW_R6DQafslnBDPs=cLv$K`*nuG^IIimr>*lYNN` zo^(HyUg8ptFP|U$^y!nim`TL@@bGXXw%PxF?MAfSZZhMWCR}+TM#(a?WZZy(in$f= z);}b#a40Jk5JjLELJJ1_iU=iueWt@uY}8_Xro>D@rgKXWr_D4LGA;l#ipyG~y?%w? z?3Z!@A6sr-ZV7osZ}?;H<$6|KDs2AWM>QV1EC20Ql8);9wK^`!vr7pQeh z4N6xkxbn}S`>=jI#R^G4KIo9p)%=e6Nt!EOE)-(_Ap2Y7nPlCc%y$?GSCHT7f>^Zq zti1UtWD6#tiDR4@ z>?yF38p7iE6%35xzduXrN1%p&j41vC=2Ml#Ld9pV4}H6DRsUGmwPk&R^oqVGP&35B`A1wfoA8V#tg|?+A@%4vR*LdzdejLO9P@v+?X!@F8gF4?s z!2j=!d=)$?Cq)$iT^-t1H{+P9If*HiuEMX=pB7flK!!B1hyFekjWdwJCCfV`PS~Wv}Ap@QnKD)TTMgjvU>ePt8|4lbB3iPv^gJteU=f7 zjFgm=_$dBgUxxsIi0fXc;R@}>Va``jB^lz|5vKoCBt9GKKSIGPH z*`bbLq&s0_`uFPUQfHE|(`1?Ole<2nHRYjdK)b$4bvv*0Jr*(!C&c^O-rvV+hM|aF zyP1}FWk-8vl2s-amM>Pn8`IV_In11RU;wSJ>ZQXbJmc0;)AFhpYA%TPo_G2VtO8ZX z&57o#8Y9{*cDxq(Oe=p<3${naH@Cr^Zfjwg#;k8OVeE*gT%^NvYIy1^5FOxafLmb% zY45hTgqA(l?>r)FWSofa0nVoV;d7tO`pDJs>h|Xwjh+}*6pioJMeM6rq0aGqBq&Hd zucsjxnKoMXAdU&-6Qb-ry%+{Cnn8*bQXIf}1n?fhaG48R-p%TLsj|?XnIEE~eZ|Nx zU*`2#|Is_d6v;dVn_aE%yM&V_eV8|2xObX@4V>xEWp$+hZ5hS7utj`C51d^CI{4Vx zP6?2qkD@Bjqoe&&r>8SRLld95{ZDjR$(q}HZuD1&?7gQ8R+CfNoSlDROc zvn!rIoNrw5T!4&Sy@QVG0O>I|0fYJ0v*`0qqqD;#o$6Jw3pO@uVCP0&?=`*0Vc4{# zOMV^!;YBbIj_w+NH>&~N()hSPh7#7+b^+eb=b=&Q=p6?gRrXji7)cO7zW4HxU+#l0(If z;q&CoFU&Km5Zhd=LeTf}g_^`DAl{AJtwbC9^7OBz{V@HOb7&na z>4gd~!yfW1eevv;y3y{dR+f+x1 zoy(+`ly)FOeKF?Xr;|?9dAec6H(iM9D?-tJaZPr$)qyU*w$#9!c6YfiAAl7tp(Yh) zHF~4t-U^~fyq(;vvp7u5`_ow{-N^-O_KYc}{MY(Er1z_yyu{VZVCvl z6LAf(vaX~B;$!j6rl5qevbQBAk>|V9o37w<yLDD@ zLR<{_TLXdtfbs%;6mZIB_Xi}p{5)rnJQP162@cF&o&d6GEYUx;Iu3$?4e(^kmy~Jz zyR-c_15DIhTmvyGYL0ZN=)_T>QO9Q)BPE*eOvmHgydcsoa&p76y{Y~J$Q&Ud{DZ^c zCo&VErR2o}Fx)Tbp+NSwM2}+n?&b$MIP_jXPb7A@=7$>yGTnnO$5r0^AZzey7_2 z|K_Q^Enpi(f!DV?QsH~8 zuGhVDnkMB5e^N+wg5Y}L>#lhS9wD+qD(zIt&#RGypap9%kJ87$!0i6UVJC+U9`NL_ z>QA?Ujp!|FPod5I5{zhh%6YBL(ZF%*lln@fy#f; z&7^wr*YDr62~la^w(?EuGMdU}OVmf@zy=JY@nQ{>Rc_pW1xOMPVpZ|P{^@IbG~5CH|`a@h2J zSJyj^ExTOJey8)Aop;?9SkM2S(xQikQ8Jz@s>?ENQC_~Cl_p1EcL z?9D$O_VRV}s0_n>h^%>6T|1W!k`3pS)Iosc(WR<~>r7uvuv ztyAN2g$JQz)xWiQc5+7{?o&?4?#lXVPIh*6?M#a~~o#2hi=Z9Bx=fbgU zM@u17^aZFb_00 zRSoFaVDuv&odKW%JP2GXH+34^c)1;)MZp%sQ`i8h4$&r++ORDR-TCY9i<0;L@+B4# zUdlnMQb?RNpvZ7jehd%yGNcE~@GI-a(kQRaQXRUCmuiCW3E0aP5T*odQ0QfN5(K>G zQV9dmf`S)Fq6mNA34ifo+S2Ury3Us>ECskyFfUCl$d{r3MEPW9_UbebF3jmjAN1LW zb@am)=KOQ;Cdg2jm^wd9aryu4oq6ZBExpuVycFI=%S3?-ViJn2!rf8#3=pcSX=*-{ zm8HBO?zz#qyvJAQ{r3akucP`k1)TPK9C8oLh=G~abg+YsK$;rU$sxqrx}Ow|x44pT zY!rvMNV%Th{aT(XYNF%n64+F`!f6`B3)9m3V77o=OrYRsL(idkNqZB4m737f4|b@TRYOFz zo8S9tGa3(m5Cq6Ud;`IhCjr=HqA|;(!hZ!><@-a?TMkxlij*VQReb8D{z=E#pV^G+ z8hv?1@3tbOva%9~7nC|a;%Vv0FlQ);-^K@$NLe#AG7cb)U-wA7ipI(C<>Al*Si<0I zmT-~`U-t@H5Dq^=3h&sEHxWL!9V{tBdD+Z-@j5^sH^1i%&J|2j+>RgJIQuxC-KAOg zI3^{vHp63_K^(tSLa?G%_a2Y7p;I2R5y4Ats)M$Xw zSaay}5CnLTL3c@k9TIYdgp_P+;Cyz{Zd$0JG+aL|BnwQBlUIC0^xjZL#f_g?fE`Srb_$uW7@TKU;~ z>eu@94p+GSJM_|KmY3Xxogmy}aAM+f_>)4)+qXY?U84@eV6mjV2Ys7aCQw|aTR&ZZ z2Pn8N@h}_acAs7b;C&TYaRqf-J`>Y{ujCJJAAUfFpsMYj#!AeV`(zyKuS-fw7iK4JzM~F zjf^M_2N>yp>W(kfZdpftQp$=}bHHM(c^``iJ&i494Q_9LCWchDr$!ZkDeQQS5BKz4 z`j)N3u8TqYQr~+9{12({sU;tp+&^Qbp8%tSDvrVjm!h*okO2Y733n0=9@lT+i~9!% z0qYSKT(?`Hsi!IqxPsfu$XscIG6?p&uB5#$YM}9aH*OExkj-eh&Xs$RpOd2g_@mg1 z1fkrVz_~dFLtn4UfDUjQT)M|YaUkPmoeJ4#jVWq|DqiE`6u+i@_IKxcsbKFq@C2(r zBoE=+1{-EL-(c6(EYolAMhiAIANqZa{lXM3(AMNN0y_c5oDIAJ#D=cQ$(N+BosWU) zgyI!moH_~i)%j1v;nkai8r})8>d8q-cM`Y*Vxy>x%sN7~?&I|I_B{LZEexzAz>5iZ zrXFebU#hg*V4Nu8x`ewyO%2r^=1!+Mw%{>XFoho@$T*S%%D6Y<*7B;V;>yb%e)t63 za9vh^0!CwPKbnt4oOek0E!7|C=y+L_J?)^V%cw04xrY-TUuXl;1cWQ9B*r`i7!}lw ze<4}kHa3{<7WL2Qf!3GhYwv43x0dwMQp5{WVOr|3KGjEi{)cbYDL7w|?A!2EAOd;N zWGE)q_i2Y=;f2do9*)|?vJ^r<6pJa zH0VMPNDgeCZ^=7+@W-oh-?Q^~ybN99Yx)(`uol;)Mz61|(w3OsI z1A*U?!(kF*TUwsWpP3d&C?x-3@aWEU2&p84z^Pr1$SY5B#xA-n|C5(%2+ zgeaBt?_Q;R1Q=jw3y5$-ZScedb7raYRjrp@S3y+o!4GN2dIBw4w+ z7vURptnGm=q=3eo{-E!sfR^%(RISDT|Rn}Fs;RyenVBE z@W6~8tj%(pO0gnGq|Ki26G%OilE%^1oy07mtbmhPXR?akMFtj@7{jvp^;%LS&L#f< zvC!jkaR;VMg{}Uj{qe?gx`ym()A1pmW5TN zB4rb|51XdWzW2csP*vqCa(iB@U8mNK7nZ7ajf<>zfT7`UmLA*vAE%IUl=zzR6!^!vN%sBLuHLIQ+nVeBP{%_c3Q)Y~>(OT2ll| zi0XPfVVi^si?BqqTtO-x)8=oC%hUZVq?5`5-~ZU8v>*<}^@-}}dRI#$_gFZdnH0&u z!AOyHIC5rFRj(f#J0XD|6c#P)4fNRa$jkT8Zbu(Yc3dxOm;b!sC;1;x?Qn=H$&{4K z%=e91fn^&pWy@F^uZ%29?GG47rnvIl{|0Bj_Y>RXS>J-$G6=Z;^5WxudZZo#dJB52 z?mTH|+hG&zY^H9UT%K$g#pg@QdzqniJx6Fk>E3{hwAV5I|VKiV7PrJRy?VD-L!-JXvmf8z#T-ZiC zO(|dCUVR=>um2{yJVki##=Ebiu4@Dqg>kg4vy zq6sNp6N6tqsaLQ++K1Px81*@l+p*2EdS}q;cN))nSxHG6?a9G1=;pSUjSlCEw6~$~ z*lle+e$aB1&jK|*UWLQ0eXj8hAre{YkybO~pL@>^8XeCB7cKIOt(b^9*PP8Lb+^HC zK)TrvJO|c=sG2cWCv3*AJrq6EN*x zMh%a!v{@o4_fZ9^H5%o7Wb}^-hMlJWal@(J=H8JpQ?!!%^eQ#kmnfL<*|Z8gK=W9; z53T#^e_-%d8C`%X*^O#%2mp#!%c=+=e-ea__|^zR2YF82Sd$l1Q&8Q18iQHoVC0VI#1 zh$~ePN_5asUpKFN?T=F->z7_45o$8{gH&2gy(eP#Ym7vEN!vJ2!{2g3rYoZ8{+xbR zK)^0*r1{?XXvn3mOl#3>xOPOLN24+F5+4_E>##{{l~8jR_jfv+3(H5=b}KR(HP&O{ z8P3#U==v*nzttG^9#Qx>1P$MMK58rA)!6+9%*FCX`_e->>wq;L-`)1dM@^|*5WSzm zFFOG<21F3=|K&C14a42(IRrNuJ%DYD$P_<4;DuoT=RbIL0=)Iwe8={g7dm)evJe$5 z$^6MBlpY)$Z2PQbWH$Min)0q%fR>hUtM963dU;vns4OpU_cP`M5Jh892#Av*g^?`} z=PIw==`*TU?^WTG*%YgAIR;8SDa>a3`-fr?i(6SFF!{G(F8vzsGXO=j(A}>rW&~qs zy(Sd7sYh{$>@_iHuFz3mZ`?z_SDTEFiXF>mW&iv#fC;Hzy>=^e?16^H-1etmUXoZ} zhJM8+m@QwVYy`&p_A`cDJsf6ctw5x(n-X12sFBk};F0Rp`YO1(@~b4pkKEC!GH&-J zku^DfopJlF2d)9S80a2&V->P-2n>}lB8P{EFqefSr}TX=garfi%wNom2M`umTk)mH zT-bhg`yxeyier&yQA^wWp5cgEAncWfKJ%RVDlB+W%74Nb-y|jMwE200ZE~6lOE6uE z`m@E6F*Z&%%RbcF1rhHPtVWN`c}N zGddo5{N@Jz%PwMx-LJ0e6U}KMH2*PT;9*z5fsj={7t&7$X)Hkln)OD)2V#%Zd?LKTL2#|rMGL8`UlPOdaM;#_- zW9P>eI7o1Y+3Mt$=$?R%Usv8hglM*AY(_c`0d*S$E)iAOdq@8MP1AB(=J=}WH>t+# zyuG;gdnbS0ytFhuueA-&dXo)ypcF`*jaMiz$757i&^!2V&1YS9+HIgJ-?Qi8t)Ek} ziFI&vv^qaK)ekt;Jv%8eS^{~j#QDca0U?3y?XF2kyjjqjIiiB%QR-ke8mPf#FlN53 z6PF_B$_&EK)`G^uu=8!usl!-8r6K$Q2@?{&4q#6Tk5M7K>vJoszdzGiAou_L(YL4z zYqPA|PC4G3b&bCJs=(UZ;_%t>^gg(kKpaSvf~X_|+;?+P!2pQf&W0wii^eMk1CIRo zA$fLi5*a^w*TQrMnev_i53U@vsykIc$Gy6{JTRYSb#@gl9pF_=WM8vX9aQkaVtBl| zLBe3*Ou&I5wI-r|?Iq z4`g zH+Xf@T2A%r^Y}IDiiBu`F?a0w?LQv&26w|{E+wHwEgQPkrwQ;gmD3cMd2y+cM8l&a z7$0g(;v|jNmj7#NsqTRDq;o*Y8=<89mUr5gnyk+ekC_9)6r2zj8yJ4@p}Qe0k^>m- zP|{dyplq$vzJcdEr&;Nq-rkooxlOH$mw7&n02WKeMwW(tOkJ4Y}|L4h9|`Zgn6{f zgf96@L5V$oDmwDKy`b&~eK9Kz*6A!yfVcBqh-sU0@3J4x5Dm&pLtFzp=u|cYg{G|9guTGcJ*!)X1Lu22tQ=n<{@`X5{?C1@T`QxrOMqhn^E?F1 zPYQjvySqSaeiNufOJl7*%cO0I2Nl2khekS^wEaR2`t(o`ZPQ8Y9WVg{iPrM#eMOdn0Jvl@-RYH=py^uMHm1~#WgMOa!=Db* z*lXCA#@^=}yX>X(|C`x&=s$IvU^zY2joe*CJShh=RC6Tgr>&+WbrQFatL0AC+f;dewvHxQfX*sK9rR$#SHUy3GmXF2yc4Pmt~XPu-sWr6oF|_>#UqeoLT~ zE8L~43NJs^9qsz=O2A!ZtkUG@Qll2S^z$bAQ7J!a{t?a#*+hlai5jjR!FC44dClnh z#68|x39?A=?tqbh(uw~0p!B7bn@RS38c513)CSE^!*L|q@(=#j#mM)JsT!_9iI%AI zKnf$@`zF+W`5EWxy#C@%=|?eCZ=3%WYM*h_c~d5E=(j#(kSt&qEc$Xn4J7@1n%%70 zJe_6fx>21-*XCG(WWNSYiEKe09SnDw_kz`#A%D*Bl{?#kNu!6MKUEjni6N&<#_D|-iJfqF=|H%uG*VwaWL|%HQjj$uL zPS?JJlJn7e`K#^c`(vk+WF>hyk2kuUE=%EVk4KQ~=sQ>g&;JNcmRT{f){R zNP0i#QRSFq6UL5IZRRoDygRSJ32^YqX29q0_uVo|^V~_{-S0mssA`%1Z$iiaAbRk# z$sWb`o6!f~i_25>oyxy$=HdnCN?wls_C*OmYGD@$m*G22GofIO2o#FyxUb9?h9sZN z$Ef*?E45=5ZwzqW34RL&N?A=5XrrsDs<>7=qr2vZM@EQovDsL^WRc{af+s+s?b=hv z%}+L!kJLaaWPPnl;IO3=3Y4bpQA--{pN0_;*SUSpP^g_BiP5kZlL1&Q8*&8$=L7s2 zrhxd!KhXST$3juN-gLaC{Cd1~f1bAwWUvScf&k+r0zwPv41y1E=rP_jQb*kbMa5-} zti9TCSTG_v`NbkNpIfF^v1egKGCh6wWQ(PB!3gp@x4V{&7RFiwLN`yw0%r5~sMJUn zb9OKRvb4Sjyr~|0^1dDr%)MPB48ns;gOg(e5SI}ybG7`-A!awnOay`v+RZLkUObmN zwL=ggF$R{3ifbAbSBc{*mDm+^aqf%UHW~Qg2Z_tB=|3~6i<5M1x=btSg71yFLyvgj zpK&Pk)n#S?JqzFg6;7MudD|c!_Ej^WG)upHRhuWMJm0xTH4YKpM$hJ|r=E4_Vi*P1 zrzIyVoqKN*65n|*MyRcjVg}FoWp*7r-z#kip!z6nau8KnuGfQX_e)?3|8ER^ibD^T z5C!)4jaug}NXtc`zT1te(T>Ah)lj!J7MKe-2TuaodWotyvaO3p=6}3F$`Zkd_t@kQR_G0TF3wkdl&yJ?8VS zckQ*-vA=I0-#?$nqwp~21m>Lgecj_4<2--ogV9(#WbJs|QFs5Hot@Q=m|9REK#H2- z>1aNphN8I%VhaR$9u9>7GxEyHp%)jz5SXU4?-1=gF3UGjhSKx(MbnJx8fdo{w%z7n&_W=Ws8#if1`!hnvo4YIzfM~}<)Hlo zm;}t(Z`zgC59{V#xm?q*G{$}cSPlvV8uGB%q_mEVx_ODCEhf>KhN!xEj~IKpKIl^7 z9nZNi@HS%U@j*5Wb%nJzM0&JGhC7PFXyj%fGLlkevEhN2?)v&VT)iU@yi%y8NAT}} z>8q}Cy7c>x48yjIdSUzdS&NZN`%Q?AaKnI85mDPr+t#B;usEHpI{7Eyp0&5%xSIC6GT&)EWNCU`p@zgZt6@ zIz((~iK3B_nYqoZX0NgEx@Xl*4C$A%BE>NDK6jfM-!wJ7Fhb$VXI@STn+RDgF(nDUr$p=R0|gq<+Q z-f%Xmo8iw+rJ=mqedGoqYwB>$t%Hs2O|XwfG@NlE$x5!B zZnmCr5wa!Az*gmYL+JY5Sd9x%LS9eId#8~QtXzb&UK7H2V-qYwP_z1(!tr{N)_SF2 z%}eIuV(z}2jrt)~qt`z$q*99&F?aP|z49U^4jq}EP}aL7fnlVs=udeT-X6cxp?Ot- z-1LS9u8XAWD=|dw2xz=vYq$TU+3lcySTr8*^6s(Ycpt&{EQ|MzjcE*G$Bd^Q9^_)c z+DRmt^~8f!K;Q3x!VH?=R1kpEq|dHV&2-vX;oH42r33wU$1=Ot-h1YKp`Td#dk9mu zr``Sl@&_(g#f)E3m*5C7(WYl$2nD7n`1W9f3Ard6JHKftV-5zYhiUrpAky%@4039* z{-(m&O*G7*vo~p}x+kXW=X1Sh!OVKYEV^gs@k(@7Qe6S=Q`|&@8xhQ1}q&8jRBl%oj!shx@ zjmwu&E1zA(0>Ol5d2b#kE;}c@Kof_?E_=oNW6i`EyQ|KLqLPZWqL51*6=pM%wWKK1@LFbfO&3bzamvsku03Iw1mJ;a>MTIJ7`dCajNhWIhy`SwD;< zNmahP;MEz6M5gtmG=dS`9}G1q>fc;!oasBdk%O}f{dgk3=WzjaQkLGqYi0x60J554 z8SZO8bsEEZ-#;>0QdES!vY@1(H_e7>P5f(kcIKfTExP~X~3~Ic0|u-y%{%K zDtYONm(-6A@;An9djAD~v87pIo*EZtSC>7it1Dd=-G*csG6QL9?7rtvqv`AJ?e-F6mu8t1R1K7Mc4W< zs*-;Hv6ZhI&T5)E?JqA+lc1;o1dFmV<17>OJmUYW1*52OgeX zF3+%TIt47RtOOu|P0UanxuN_3e5jDcgdj~35Ud~uffEzM(HV_Efu|O&NFuZQOj$B6 zPfZL*x%tIZfVLQuM|~PUvXwn{t73X&0zm>GH7^Ix*o|RT5K?-1G&fD z5Ns+_0J(TWC`Z>oAIZeo-?XO=(1Zkz1V}iq4&1Ih-m)79gqb}uqP%JRyR`(vRVg@D z306!uF4l%p2H~6>Ts^L}U+>`ro!vkN7a7gX;$k?6&~D$bP|!*=aST9)w+abI)Sf-e zBp#-7!;QOsq0)(`qeP;^spHJZj1M0g!84fiKG&=A7A-c@z{5NVS^V+rm>>4Lk5WjJ zt6h(nfLVxW*HK+96RihBapROMR7eVRtlKw!ZvS=qkp#jwK8EDzV3N67%uX3p6yF)i zvM4Cjkfb#{jxTW#4mps`q)q548;ZBpv~1IlA#oBblS27CMueS^MfSz{zVW3n_hJn^VXsyfy~4&uRKV)_PF^g^a2NrcjyUW`_Hiu)EwzW<*z-~a9F47U=D za~NO~+5bj1reTmjE|U&_Snr(`5n2!~V}fNB;wI&YoMND)X%lX>6u4<2V-1?-u;t;?yE-;bm0mjex z0CIJW{*$mwcv_+&2r^G056zO4px(EQt#nFBOPcY>W(^p#JdfQlEl-6;#?wcSeh712 zR*Xd))TCo}B&+RYRt{?8Cmh86$6g*WX&K9iqbM|fqoArW)#w?9jj5D^b8O$OA}(mu z{dIZ9WClN8-6g*75VI|<9HH)4_)m4eoOFIEzg>6`b@*Wjf-VHV-dGN=06WQp(O|>( zmS=^-Jtk^7mS>DsIvPAMy@8GYf~#P;%N`pUKxV<)5XGADq1epzPFi|WBy8#Lv+5)$ z7;H83$(9N66X@O0jCjx--VoM%3I+pSPLg5udsRj5iuBKK{0|X-a?#or7bi(zIT;WV z@xr687V zNWDTg(Lj|%k?i2${^r6`MV-8DVk^xH2(Zdh!O$_owtH3y%$<2a)cg9DT#39*i-vK6$L4kc^UaezR?}1KQH&4KMb0NYIFL{b*U=<9zv0Vz-awFM z(G~rS@f&bY;~{GI-zWXL{yOhpvyWQ6HAD zWXk?>5Q@vQn#lU_VU2R&{y!jl^DG}Wo;T)ly>E%A+0+T$Ft9yyJ*HL~G9 zQ?;&`Y@MHZaDxL>j0adN_o-SODUN5k(?$bWylqiMV*=y7sQ}RSsP2ARLzmLu%q?jy zlf>t!l{#$Y=}C?@h`|iOEKLwKdGtr~T~R@y#x8VFg~;K(N(Glgt|%|GHBnn*NStIeMv5khA|fu%`wt(Dw}R0H6wR}; zmm`PYt1GSb@6LM~k=&ZRomR_JwQGW7c2V8CVm4YY6od=PfY>e!XBI-^&F*P_;H1zP zjI_Tg)vt+9C{%I+#Jp|e5wz<0>{^bnrKR7L>UdC~;!rN0ge4%%ejq1KWThJY@gsP8 zX|;gNF0ZL65;1H7Xe_8;q1O-Fd1mPRE`RY4eAS=?+jJNlu|jVYlyyKWWrJ%{o55?) zGKIx2-uLvB@cy%)3CV*X*J63u@D`+(H$J-Uih_yZ@%=c1zwl_l8@^zhAl^LQlKBEV z#A+Rq&`$UBZMTm)rJzL^p~8L!NJL$`dVvRh64dD8(1WO(m&YdPDb(Oc? z(3W_qclhM3^3EdC7bHo^b#&X-@<{3NTd&s8QAeBu;jV=PF12Xn}$0 z<*G-fnel7;j=?cTK{S1q7c#B=5MO$#*W*ZU_o8 zWpi^PU{KKT@$uP+;9z3@2{F$!g?XqjSUX|w@l5SKa!w#q_plV(EHmU+Ol`h?hY|6y zXVgQQRIU2B?1k3XGaOQW-+~y~r!=uVruxhYmlu$|R+8P-;KZK$4B~{Ry>|!vCw%jtq5*UXElp^m z6tT8GSg2v+Tj*u8=ryxd~g-R3OzJHfkiIi`T5fQ|tr3KE~u93aGCWR3-aIVx_Kq;A-Ny(zg z93QJyzc2Xv_vY!IvR|;+^zhL{1&vU@%yV<-Wi(-l35g(}YMxdwFKXo3uS7dvNMHwQnY zK4Bru{q!m5S)r2gdeM+pEa$(F*;d&dKY zo8dW(H!pmzwwPbi$35L2ko@SlC>fR4QKK$)5Xglyo0fCuqso59r zEJy)ZE1U?He*n<^{j`ASg`hiqeaada@Pz0NK6ZW`7=nGUjGv{DG0wpO4r_{mOubGp zE>vB;i*lc_)%Wqi=bN(^f!!b|+`y~Pr4i8phr|@Z;}G{%R-2lBz#L~a@S}T zm6xyn%I-icO1Cgpt8J!T`}*WlgxrSKODF}!o)iZT5KnO&j*RJ%2FLxreuN2WoyT)d zL?RF->~}_j_-V?%S58_5zrJT7Q5L?bC(!?!vD5eoGYE+WKdhs?qimxm`XJj{@mNty?FmI#Z4j3rURJ5=_KUf_G#{Gh8fZBc206l%YVIAtJ+v7h)lI))QMh@-w`oq@ zyUcI>I(A+&$%P{+tUIF&BmXkktd|4tOIh-$>uMGybuB zBPCkhdtpa>8^z(MY0v?XBU1O*Y4xFVuU~-*s2Dg;Dq5-JWKS+9VIz0=ZT%HDI6OfS z2g6?{+LX6mC9%EEZSDad_nP4z|a(ArCJ7<(cmAnCqly zs0IysIuKf_ji0t*)CeCaJ+tKKXJC61{Vf5_<#qi7&8xp*rYyy5pgr4&mZDK3JZwwY zzW5V!&OcK6=Okm?dvmXzpMpqxNZ~VY!bWc%zD2UT>BfR_*A7|A#7_Zs`cxF-<-Iip zx9m?uOw*mqJR?_?PHs=#6@xjsr<7j&A$=6qPcs@zN_ZufCEA;q{eL3AM*Fs5{eL09 zULWOKhC5|6HI!w{$?oI-UjVQk7ejaPSyB#MlV2c%`xlJFp~9^hc0R83n}lm0P5p?v zN$)!!KTxfSxYQ!aD`0ZLQG8x(gsG?@nERzSJ>2>SYp=Ps3qZfVFNeddvG;AKS)7)@ z@Nl@m;pn`jrX#JJ^`O=f9`+k!%Xlv z2rgTm?WH~~zX`+LF%w(Q1axAr-4OFrh!@MSw%mWuXlZHi_TdkDBI;a0>^HbtCSiHy zdYd`PFHl&jxGhy;I`1zz2wCjz~ZuzTT*dbgDDm(Gsg`8!4@v6tT?cj z_I_V|VPsm<^Zzq0_Cv94OZ?bPWG$8=1T$7gm1n9^LJIZvAWmKHCxc}Jh7#!^;eT1u z$q7X>IH-Mww`nz}c`*awDg9$f4;g<%5d0=BIUUD8rx=|1h@HEGI7hYA6bGidV(X7i zj`}AbQbl27r4hCMh1#^!<8wwzeS3Xa?@E_hO>EX?VPy@5^!THSrEk_FN-w+Syiia& zID%PT!3I9?pE2|>VhkPD>ps9<*X!INt1Mvqf1N@%4$5G=evd#hyqQ=cbtnY_EKY-M9#PxiFjlmVn>{tJ ztnvrg)xni>c#VE~O>uX^B@p;S#l>o|NeQB^{C0KIVPm$1xy(VG_hXo8AFHWuY>~DE zQ=_eKZHbS$>^q|TEd8On0S%+-Mj-R{45A~T4(BlRXZRjs_*!gQ22iDP(#R+kTL;OD}~< zOkt9XRg!9K63XkG;w>TPbU-Qg$=@lmv(C7217Kz!2tr1HrTE0N-6w#$jaVD*T5)`D z$rKWunNw0ols29kt~h}Om^K!D6~)A1uHQ4^IaRyg&_T;>ofRS}qhwsITki`3iyVC* zN80#sxy>|@CXKZL-4FQvYfs(I2TPv#Ts$3mROCJSu!OfgQv{>|_aSr-hNpz&ZmK>#Nr-EiH$;5@_6tk`qS`gwePGb1I=wZdJmee6>f_ zqG)Ki5PH|aQgF7%IQW2kE|Jb+MgXWJ9Fd2W`0u3A#KDEMd;LqMsn#OFLQWas*etHP zC#@l%F&0~XT>IBHRaXdTh=zLsOdw?juqUN9|FWg-&rxO+=P&I|nA7@ji*1nyM_FOwxiQXAz49l9Xle z2iPvJw0P|nfcG*BjLKlyr3XVUNZ?~LgxnmK*EvC{3q745v+gL}F zvOvH{)eHD4jc2x5)~M)d_;=VAdTQRbfp)QfP30(n5D3&Ch%De7O-N+CaAJ2>!TI}gyqBc$5z6yy5R81 z`#_BvGu`=^CDXMKkkVXUW+d1l6tCy5?57Ag94#Nx+?0r4-?}q0O+?SfFdiP>jn7?E zi<3{Hhtp6#_I(E0h!qO=Z6?d>ryzYdUIAeZ3Faa zSh;_b>ButO5kM9@C}xIbIo-lCzorZ$ZBYKX8@mLWeE31{z9#}`h8MNq(3s5Ub^Fw# z?LhS9!b}2^Ui!Wf zYyN|Wf`URW<{OZ8b&&)ImcV8Omop514c^lczz4|VyVxRXT?XZ|%Ds1W^OFPYzNhy< zQ(I_d>AtaY)Kq;cLQ0wn@_?mxSY#f%&5$#T;(a)x*>W97b+A{v4Y9NO^M|+7c$?)Q zez1P+r2&loh=Yf~>w59KXkO)|-)#-mHjZ!VQBsc#b;j_i`yKo666uu2xmD)BNqCuu z_U#)1XbuVZ+Yi}U^JRde8$HoNP}RH4_n1a+2z* zVtJ;o7HUWwkNQWD(^Xz-4pTGNFj;K@t!b^SQh$I_DA#SXe-b0eTCb?l0hbId@Qh zCtEeKK`GnTyNNOh7p5yoh7Xfcfv|#2I01kCihBkeg@7xT-(g zM%z<}cql}ACxT6Y#aFtr_OGy_KVTpY%W0RmI=c2wDlccdCvCbjBXEz1sQT5yjlWd< zJpe3*2&7?29MLa;*-mLSpmdw{K;0J*bSe;nrHH9NTmWE%=5A<7W8&ijRiA|9;^~Ub z-;IsV_0CB$$kG$64i}M|?wOc_or`7d*T}Oi0eeguIXLM!i-*iL5=VZHB5<;*_ulpG zFRCUc7i@CZep)*C+>4HVM1yHz0)TR?K^t!F8dc2~kA*Yyit+=~4R|5PaJ6>GSrkYy z_yb_+1U7ct%p@1UD!6%TfS1bHH@sq!XQ)o`>5~h*Y7gFctd%j>^@m9(%F(@ZY9Il% z8jPge@29x7*0}w}jbUJ99TKxb#t`>1$FXa!^ZC9PmKWe6g}T*QkcJy~#>|jBh*grb z=qj-1`2wCmWM4R5B73I7{UTiDt%AZjDh*Z0w{-rgUE@u2%R^jH(93-{cXs)vn#WHY zO(;kjf(aMHOd3qN2&KnISyS>cO5#jYE<=>_X1K%U{rql*%y#9RR->Do|1m#@LrtkM zo(=Wc<2>nN{JWqjhh`zTC4YjzfiU8oJ%2#_QzPQD4@9+vg(0x^AQ;he$9|#3MLkuK zyzRq$qgkv$UpO$~>H;Ay1L@jfgJ#BU?Wavu4zv*2^cn;ig;kEXMYC|^;$!Jj0A=9X zNC7X+pcySO=C8faplN|rCZOF`u~fs6C_2?ZAg!uG@CFRmQ+y&-Ec8nt=H)4gT&=|h zs%Sr`MI8)($M;lPDOX;R*LD? zoFB`|jT8-0!5ljB{A!`Ea6#G_l9rNpp0y>CzU9HqT{i;t@^1|MsLl`N#ZZ9r*@okl zbV_K;AvYdV<(K8AJ+6(Z9kOMT#~8c%We7}ps5Aj#Y@+ubg>9we*2WDCR>1mj&pglB znGwvm73;?(ZiW&xco`n0Z1Cz5z&AQgZKGP!fgo;NoJq3dqJ& z-@B7tL<%M(=-C+N&Ct=#;+YToxlVIn5_=+_op&Hc4We29RTKo&kmjdFc}6d~3wmE& zXp15^y%0*!^vQn4m*yrE{``6qvQTU5$9TOUt?QSwP!)}P6$$4h`kT^EpI_%P{2par zk%ijyZYX-0wss;TTrwb(;VhW&j8=7qjY0ZWz4P&5w1QpieqCd_5^3tx`fkj7E5Vfq zZyxe}MRVD}hA9iB!QX*>=fl2w;9#ooU^RAh)jLCW8Ep|GKgHi{b8ZQM2?GN<@;CJ@ zc+Wa61m5Ll4oj(JyS+Wpw{AEv;K;@>|4Kpm(tpDlUt#af0A+-<8NATTw=X}rIX`LMqhk)04$V=UAx~X)|31-Kq~C7z3 zyuF(YN|`1wJcCiG#in*V-EYfHfQ0{%?hI5mx7Ngnr;7@Ap$v0*b$y!p6MQz>@gH>< zY7JScpii!4lc+i@e?JADTL$p=TR5|=VjHeu=PBTCtu(VE}yHJz?be+X{}>v+Jhu)P>`LnA`F$IVbW3>Ml?0X2(=b_1#L3cIiW;-V36%NZ#dZW7mog2>J(D|sNmKfX-H|6^C*%e#Ggd_*< z(~6g?N1ia?JE^X&Ki+8!!x^?qC=EQae&n`vJG^ukhbzmD1XQTtf+wVA-AsRoTSY2 zP=RVDw3F&l52%jF#WaTFmUygB-Py4e%b*6%{y@!ev}dsa=D){@6I?qD^u_t=^H)7T zmQTkrc74&l26f|1Z1l`TI@yq{o!Jtv)fBkst-(H0=$JCQrSjcQrYIhaiCM?*SlDhD ztj%>Gc)-y+xF~@RaFn?WAmu4{?Dv9GUv!9Egi19aUj2gBFU7xpjT z{8_5G({iq)S>6yWCG6k7eP4(fgXSh;{sxS&#iKLGmC08~QW0sq11_WT%^AP><{5|X zZ4<21lB|=9CF0xAoZo3WaMdi;0x`V1u>QRVVUXx-RQcy;ZjAkASse_+*!T_18vw;< zFOacz5sNPO%T@5B_VDGpZW$p=O5>A%2E(=6QSf7o`(2lg_u2VaAswP@c?$6lUa+Ai zW;+oQt;Ru(v37*pGt`a*WL&mF+F4K16hCUAh{YW5_Bh7QH>Z-Op9%z#SP6Be8=&Or z8y%se?cbmy4|6<}V!eG^zb;LqpNJ#3iQk3orcz;`J$DzNOOZaOV<)m^_QUqvM7sb= zZzz;K#&h)uIx?Ji(_GTOO$KkO#N!5F6mVe%Lg))#@A3!k+rTw<5ZwM*Y93Rk#R``s z)iR34+2DRdnNW4vg`Ty?vNw|YIr}uYytD9o=^&^hMDYCUBo~Ib?YH6Z`~!Yy>olXr z_{Z&suxGx6ZkpLfj=+|fcR((KMRNTM%tlfKax{ z|2vC{2*NSgDOKIz0sn$5wxVHdRRDh2&C$@M1i4#^6Jr@V#s|twcN!8O@dnAh34TC8 zkT%}8uvADwOl$(_M7iY_pVNcO3(FiKD@r3NIL>h_lHB`2|Nf+s@~@L3PiT^8In5fS z)8jfWXF;oACObvhByvrtV z60=NY3sSV82A4yrsiJ}9^3{pMdw%8aM8yZD)Z)9**dLvS4deUP?H|+J>?a(|&MAeN zOh8-P0@AIu57{TZdF_v_ac4Q8THT1*E(EvUckWM|)ur|@1MU63>==4j0}YP&@JGuP zEe*TMYO1)QPQK2ftl`B*>s`s%9sT`(P)&10iAu&DrFUBkHoq?6$B4r>n=twFQ#LMB zeFqyq;i)v5!=&ed*u&>%D6Tv|lF3~&USOEWwQo0g(>Nui$xS%Cg50x58DJv&pUwM! z|Gx>I0rnhcif!oO;|#EbAGoBqL}mr@^L$(~DyZh>Op#|S4v!5snyzp$d=h`BHc6H# z$u3nap*OJeeiZ3VfMWlrzaQsKKnmv}{j-#}s?e;Cm{@7Ij04vcvUOtiNE{-@8Z~bpo6C9(Y)8x!=FL%!De~0xFe;F$F>|g5M-#7X5{K2> z*rrY6+mR6mlMwKXgPM%ecfE`4p@1r>)AS5)os3;te_AcorMEFIPy(KNi4SH@K}ZO?fq_{<}!ZOnbCTO99^Zb;wwlF4P1AWQz6F!L&w%BLnw(Mf zls$F@n()G&q!AmNx3AvV2sedxVl3ST{tgkERB@pBSC8N|CQc5uIMxoQq{vX2rw{ms z3W)A&{HSD&d3rY|VkRqmnZ&2rc#|Qa-|ykMiyo9kbPtarU+FM)X(tXVl{!5KexHr7uDA2uZM;&BfKrQd~oCq}Yk2!kk6RB_| z>Sa@7#29gqX{spZ0pW z)z$cl<2~$*)N!F>V`E&0`}xr|(-bEtzOeKMgZm!`E@yt!uZP#t-cme~c>E|OuR0fk zxL$vk>9(wi-9BD&^(x3)mmLi?e|2?Zm0hbR+GhHdoz>Fnv@I?1K>hM2Z>~@QB}~PL zZ^INZ`Tnez$Vjr*(v5SP6xnYxGg2>KQlW`IiUWmGdX20Md8^y7ZEe#z+X?}J@Zb93 zCCB=%JP3)t<(#P>>7TzuphO^WO6-hWSUUHKo71vmLZq zKIy*&oR9(`$2F~@^@*RK*vrd<)?WiDT-Kg0w5bI&a(E5p(4QxH_io1XoZ{ZSdmp{J zv0Zn54$U6VcK2ymJ^4P_`9t~k77-q#qxpI6#6Z)@M2__A)yDG5TIJ5FZZek}8*Q02 zGX7kv)3!2MewWl55$&j7`+niD%fhDEv^=SAi|LuC-CZ+K%a-ze(QziX`)X_Ly&cR>G1>>6dSR0rJ9@CcA?pYzo%ZCsF6(B z$xW1$lR=L1lkgPW8~;#~wQFH9qV-oP-NkLIM%lU1>K=`Fry>Og)Ow*N>`i z%+1da?_>x8`w@y_JoJ!fYvh8@r$)`bq6TrE2eVXHvtb9ukK$>T>qoKZen=Hb%eq`H z{8Ur>h@YRIyDp5_DH>yZczjaK8;8F3Wa!GOT4+>a^XN>g#pr>4R!ryh_1~c*fpBA? zU#*!bKChlv5X8sEYT6^q5!#W_Sbv!y!X#J>H-2f{J-qxZUX01rakGGF#Y&dL^to+c zbR|~ZX9G%!#cZM*5E!9Z(ki|JOFURAW7t9s`wI5^2=?l{pbCKx`kmS1Lr zulCThT(7g%23$Go>+W%nIbPdL&#dnj))j`hdj}hQd^@OH2WH2(Ivr?DsA_3JMC`Er#{IeW_-X*tvwAG5V`Myc|PJ2M7oVJSdxTmt^TAp07Q)ABV>H z>Xr5Ko4*`%d2sKJ zp+axHSk^*g0t4)I@*4_*>k^5wTY|R)}^RWoxoAWVcnM7v9GYWo5vxRq{Dz#a~)#x>`*;@xHQtes5r4 z;7{jTcfE-4Q!6V7g$l51xeA9jbK+|CsQavQfB9l*|G9#1$BK5|N#r4|{@2C3YwcA? zqm#tW)|O1>)StF24AkU}Dz(}~9;ILwIj54Lpr}88K2~eNwX}qvF6xuIkgXe3JQb#> zIO1~p2(+gNA!3bH+R0f-g}~{c98%5*WAj9X>hrqPn5%`|qGFxSuwk*a_EQYT^lI5V zO*z8MWp5?qR=f+}Uk*KPbvoz0J|BP1_@JK0Js~B9#I<&JpsW8tgi}N1Dqm^v#Z%OX z4U%*hAbV795Er(b6UKD+Uyi5-2M5EM``}*j;;{LUy_-o8%pLcCw*}7BJB7?&@3_6# z*vV-z#7Zq!)gV~B#F;lAFSd-P5Rso)Vbd3Je+_Ze_RuC4JwJSw6NlC-6`(-GW{^U^ z+j7hXxj4CvC26@?6f5mGYbV=rwA{gD^+J!@4-dKFz@)t!Gd941e$3YL7xc{z?(%EF}`#rPGAFNx}cIJ+b@yeoC$wGB@<{dgtj>%pg z!y%fP>RC+6kB>Gh zd7OT5Q>JH1x68*5;qUIxd=HvflSbm=a$tMe5Ne^5r}prNoz^f}s}Fw6M8CT;=4&sv z-Mvntm+^9ioQe^UpiOTa5b&5<_WdXFY%fM;_U_H2s)EY956FEynniD_&vw4A2W3x{D3{~S+= z)5cQa@F7{|cSQHJED5!Ky=S_3;5+AaEn+?G+ElF-seH9!3=0|n{?@3jPqV5jCEwT* z=P9OL&FQoB=QN(*@$tEoo$lgRw8g>UA`JV*iFxzao_m!!%e0oGXo7?Z5v_}2chv(4 zMr$j!jIF&CDNl9*PdGz|pO(Zk=rBXYj@$nL^>Viz*9_7W?cdpBtL;}3sU&}h2 zLdf-_r3QhU%o9gJ_N{u41-5s5w|$F69WT30AE-J%IqOBS8sdzS9~%(~Hs;5&n=8OA zEcNoPj}|7ZAKqS|v9z+XnEsxqrxya^Xot;J*4wDJe^$9L>sKU=jHp5m)%f`MS97yi zZOQE;cW@_p<>t~YIs~+-L4568aPnyzJ$IA=N2sYbCJt6*Wj;a7g5j27(B3+K+o&35 zM-MCAse(Ksj>bq!Ng#~9owk4TO!3-fAJy01a2R}}z8`^-b z>mIVQ8XFk}Y;0I)PL%aF3%|h?{_L04(-E@e>%b>7=Mhp_$=T4@P_3IHCC+c$#j!H*=rkX#88AA+E(P@yOttGdMZQgR!*T>6y~}^BDg-)Y z@Mp-$m*+)KpL=?hS6`mOz^B%JXG@?(cu$~Y^Y=!*FIIn5tXfrZLu$9pjw5)Zr2TSmvFxgRAqDtkx^G`hA14exrH=wBqATTS=(NFW7$ za~x*1krT{lTVpqTE`!=E((J6?B&$13&uce104J=H?*W$a2qU=QoVJSOTS}_d-lE=k0F%3n>(gDa{ciSFlgr>J%-JTn`@jr+?yE?x5`aqzQ)J9T z9O!ONesrL%eap?u3(;4eXXj@Eu7_epB_(UCgW|B#?fRbF%~sL)djgb3!%fX@ObTw(Rz_nVpBzM-T*6B4G*q@+k@d_E;b(z zP0)Kz@~+LJRZM5W1T$g5CwjA%sk%BTifQ$q8j63Drs}4GkOmHI@Rn+rB~)W#VR3Sb zDs`mt5H~!LlS79hvBS@Y*g|)vULcaKbCVf`Zc32-L zbC8TrMgA`4Z2|9-igowB2e>z~=4Aj;VZebl={={I#yd7K4XbcED$dR`QcS!%8k`gn zchgcGQ%mWNj;wyxm(VI_D&KD{)L`Qt2kL1<_A^y&IaBFd4duquyhm1~laq5wuxG5Z z#jY~n)t?jGCoELTShRHGg8*dg5Ra?VZDL9ssOnBGu4e8#aNxqsW#Q=5k%aTzyLUHl zh~N8Il8Z83#ed!5A;_-(W%t-={Tt1ckSi?#TK>b%bf|iUL!^ zRC*ZWs4z-Vd#Q_m{PY%N*XHz{Go|Z=y*+zL$#oN`i(JV~`_O-sJgwHQAlFQMm6nCx*bq8zg(_=wT_4Y7jD}JuKihLjQ z`VtC*zfL}0JRqgRM`!8(y0mAuVrOhVaT`-lax&4W{Pv_?7QYpKg9&&2R86ju`thH6Kk-}_Eie_Su^QT5bZkeddapFWjXR`ND?{|+QxoRh{ClYd0w~Yp zbO+S%OnA9-tw(~B%8vId&&%WVdCZrvpvddWq5wBpU*E@FR%Ioi=AZ>wNbFlL#b7NH)?L zn$vG0*Ugo=ZDNQy9^^eImp08?(<~;S-XE3rE3z4~on#eLSh?6+s&ZsxqQyG!7-gzp z7MJCBk$T@7Hp|4jdu`E%(#(TcGLcU)BHhSw7Pno92lXXjq_ zYy`3mQ^GHVC0ST5`1P_9on>=lIjVt$s^eQxiGy$PZ~u}&^XU3LW8&5UGw!6Ukeo-O zNF@?0>Thom%@(cgA8_&|Ab)Un`7;n#A(r$Gp0LH2?N`#TOHhcC7Qcv0e1jmv{7{Fe zPZ1Fj3U`-CEr^JSlJ0l$jIzNW=}4##1pcOpFe-T$5|fd>fqq;(C7v2_Tu8A z+SkudrvCW`r()fY1GEG)#uku}kit#1o<^)LM)JO{>Ock;3MLXEc``0=3gIC;)9V;;s5a9ulxHO|GxK)(f26-{`{6N z+=e9nOj1q`K0Y&cG&Qw#dS&M<{xTl%a~?QLYdM=3I-3f@E${*95yvAARt`Q^PHuG$ z0YOeqK^`7v4h}&MjsotZ5C81}Hg+Z!W*-0h0bJ^j;C}D`?teXiIle*#9)O4V38wBA zW`ff2kFuGWlc_TjAAj$6F9x`k_&;w|v2ZuF){?TYf#1)<&K8O9(WA@|F$cI0$$!6( z_W!;QCpQOgEDrq}xYLXOypx8LsiUNw4SXMGBwijCYJM&jYF<7TYCiag_{;I{{}49_ z2(VCda&p5z9Gw6DhZF9>$qA3-cNBB96h@WF&Y%FMOXYb)?VgAY) zN%G&HQH$H#TbokL*&4I4P$OQ*I}LLm;W0%2evFB!ld+?Py))wZNm)4ATN`>1k-hs2 PcR`YqR+1{0FbMcx_4uje diff --git a/src/img/tooltip-frozen.png b/src/img/tooltip-frozen.png deleted file mode 100644 index ca5c1ef42a580a9988fb6338ce5a7ea1b51d5469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41230 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 diff --git a/src/libs/d3-scale-chromatic/categorical/Accent.js b/src/libs/d3-scale-chromatic/categorical/Accent.js deleted file mode 100644 index 07ab707..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Accent.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); diff --git a/src/libs/d3-scale-chromatic/categorical/Dark2.js b/src/libs/d3-scale-chromatic/categorical/Dark2.js deleted file mode 100644 index 13fc291..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Dark2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); diff --git a/src/libs/d3-scale-chromatic/categorical/Paired.js b/src/libs/d3-scale-chromatic/categorical/Paired.js deleted file mode 100644 index 30094a0..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Paired.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); diff --git a/src/libs/d3-scale-chromatic/categorical/Pastel1.js b/src/libs/d3-scale-chromatic/categorical/Pastel1.js deleted file mode 100644 index 4b0e093..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Pastel1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); diff --git a/src/libs/d3-scale-chromatic/categorical/Pastel2.js b/src/libs/d3-scale-chromatic/categorical/Pastel2.js deleted file mode 100644 index 520a5a3..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Pastel2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set1.js b/src/libs/d3-scale-chromatic/categorical/Set1.js deleted file mode 100644 index 8c34c1b..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set2.js b/src/libs/d3-scale-chromatic/categorical/Set2.js deleted file mode 100644 index e6bad53..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set3.js b/src/libs/d3-scale-chromatic/categorical/Set3.js deleted file mode 100644 index 8eeeb04..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set3.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); diff --git a/src/libs/d3-scale-chromatic/colors.js b/src/libs/d3-scale-chromatic/colors.js deleted file mode 100644 index aeedad5..0000000 --- a/src/libs/d3-scale-chromatic/colors.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(specifier) { - var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; - while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); - return colors; -} diff --git a/src/libs/d3-scale-chromatic/diverging/BrBG.js b/src/libs/d3-scale-chromatic/diverging/BrBG.js deleted file mode 100644 index 5e27ee6..0000000 --- a/src/libs/d3-scale-chromatic/diverging/BrBG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "d8b365f5f5f55ab4ac", - "a6611adfc27d80cdc1018571", - "a6611adfc27df5f5f580cdc1018571", - "8c510ad8b365f6e8c3c7eae55ab4ac01665e", - "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", - "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", - "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", - "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", - "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/GnYlRd.js b/src/libs/d3-scale-chromatic/diverging/GnYlRd.js deleted file mode 100644 index 2857b2b..0000000 --- a/src/libs/d3-scale-chromatic/diverging/GnYlRd.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "91cf60ffffbffc8d59", - "1a9641a6d96afdae61d7191c", - "1a9641a6d96affffbffdae61d7191c", - "1a985091cf60d9ef8bfee08bfc8d59d73027", - "1a985091cf60d9ef8bffffbffee08bfc8d59d73027", - "1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027", - "1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027", - "0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026", - "0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PRGn.js b/src/libs/d3-scale-chromatic/diverging/PRGn.js deleted file mode 100644 index 3be94f3..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PRGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "af8dc3f7f7f77fbf7b", - "7b3294c2a5cfa6dba0008837", - "7b3294c2a5cff7f7f7a6dba0008837", - "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", - "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", - "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", - "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", - "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", - "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PiYG.js b/src/libs/d3-scale-chromatic/diverging/PiYG.js deleted file mode 100644 index 1d57c4f..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PiYG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e9a3c9f7f7f7a1d76a", - "d01c8bf1b6dab8e1864dac26", - "d01c8bf1b6daf7f7f7b8e1864dac26", - "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", - "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", - "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", - "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", - "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", - "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PuOr.js b/src/libs/d3-scale-chromatic/diverging/PuOr.js deleted file mode 100644 index 924f5cb..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PuOr.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "998ec3f7f7f7f1a340", - "5e3c99b2abd2fdb863e66101", - "5e3c99b2abd2f7f7f7fdb863e66101", - "542788998ec3d8daebfee0b6f1a340b35806", - "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", - "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", - "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", - "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", - "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdBu.js b/src/libs/d3-scale-chromatic/diverging/RdBu.js deleted file mode 100644 index f9ba196..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62f7f7f767a9cf", - "ca0020f4a58292c5de0571b0", - "ca0020f4a582f7f7f792c5de0571b0", - "b2182bef8a62fddbc7d1e5f067a9cf2166ac", - "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", - "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", - "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", - "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", - "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdGy.js b/src/libs/d3-scale-chromatic/diverging/RdGy.js deleted file mode 100644 index 9d1a4a1..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdGy.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62ffffff999999", - "ca0020f4a582bababa404040", - "ca0020f4a582ffffffbababa404040", - "b2182bef8a62fddbc7e0e0e09999994d4d4d", - "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", - "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", - "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", - "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", - "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdYlBu.js b/src/libs/d3-scale-chromatic/diverging/RdYlBu.js deleted file mode 100644 index ef93e9d..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdYlBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91bfdb", - "d7191cfdae61abd9e92c7bb6", - "d7191cfdae61ffffbfabd9e92c7bb6", - "d73027fc8d59fee090e0f3f891bfdb4575b4", - "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", - "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", - "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", - "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", - "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdYlGn.js b/src/libs/d3-scale-chromatic/diverging/RdYlGn.js deleted file mode 100644 index 2e3964d..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdYlGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91cf60", - "d7191cfdae61a6d96a1a9641", - "d7191cfdae61ffffbfa6d96a1a9641", - "d73027fc8d59fee08bd9ef8b91cf601a9850", - "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", - "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", - "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", - "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", - "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/Spectral.js b/src/libs/d3-scale-chromatic/diverging/Spectral.js deleted file mode 100644 index 0133e0a..0000000 --- a/src/libs/d3-scale-chromatic/diverging/Spectral.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf99d594", - "d7191cfdae61abdda42b83ba", - "d7191cfdae61ffffbfabdda42b83ba", - "d53e4ffc8d59fee08be6f59899d5943288bd", - "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", - "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", - "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", - "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", - "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/index.js b/src/libs/d3-scale-chromatic/index.js deleted file mode 100644 index e752dc4..0000000 --- a/src/libs/d3-scale-chromatic/index.js +++ /dev/null @@ -1,36 +0,0 @@ -export {default as schemeAccent} from "./categorical/Accent"; -export {default as schemeDark2} from "./categorical/Dark2"; -export {default as schemePaired} from "./categorical/Paired"; -export {default as schemePastel1} from "./categorical/Pastel1"; -export {default as schemePastel2} from "./categorical/Pastel2"; -export {default as schemeSet1} from "./categorical/Set1"; -export {default as schemeSet2} from "./categorical/Set2"; -export {default as schemeSet3} from "./categorical/Set3"; -export {default as interpolateBrBG, scheme as schemeBrBG} from "./diverging/BrBG"; -export {default as interpolatePRGn, scheme as schemePRGn} from "./diverging/PRGn"; -export {default as interpolatePiYG, scheme as schemePiYG} from "./diverging/PiYG"; -export {default as interpolatePuOr, scheme as schemePuOr} from "./diverging/PuOr"; -export {default as interpolateRdBu, scheme as schemeRdBu} from "./diverging/RdBu"; -export {default as interpolateRdGy, scheme as schemeRdGy} from "./diverging/RdGy"; -export {default as interpolateRdYlBu, scheme as schemeRdYlBu} from "./diverging/RdYlBu"; -export {default as interpolateRdYlGn, scheme as schemeRdYlGn} from "./diverging/RdYlGn"; -export {default as interpolateGnYlRd, scheme as schemeGnYlRd} from "./diverging/GnYlRd"; -export {default as interpolateSpectral, scheme as schemeSpectral} from "./diverging/Spectral"; -export {default as interpolateBuGn, scheme as schemeBuGn} from "./sequential-multi/BuGn"; -export {default as interpolateBuPu, scheme as schemeBuPu} from "./sequential-multi/BuPu"; -export {default as interpolateGnBu, scheme as schemeGnBu} from "./sequential-multi/GnBu"; -export {default as interpolateOrRd, scheme as schemeOrRd} from "./sequential-multi/OrRd"; -export {default as interpolatePuBuGn, scheme as schemePuBuGn} from "./sequential-multi/PuBuGn"; -export {default as interpolatePuBu, scheme as schemePuBu} from "./sequential-multi/PuBu"; -export {default as interpolatePuRd, scheme as schemePuRd} from "./sequential-multi/PuRd"; -export {default as interpolateRdPu, scheme as schemeRdPu} from "./sequential-multi/RdPu"; -export {default as interpolateYlGnBu, scheme as schemeYlGnBu} from "./sequential-multi/YlGnBu"; -export {default as interpolateYlGn, scheme as schemeYlGn} from "./sequential-multi/YlGn"; -export {default as interpolateYlOrBr, scheme as schemeYlOrBr} from "./sequential-multi/YlOrBr"; -export {default as interpolateYlOrRd, scheme as schemeYlOrRd} from "./sequential-multi/YlOrRd"; -export {default as interpolateBlues, scheme as schemeBlues} from "./sequential-single/Blues"; -export {default as interpolateGreens, scheme as schemeGreens} from "./sequential-single/Greens"; -export {default as interpolateGreys, scheme as schemeGreys} from "./sequential-single/Greys"; -export {default as interpolatePurples, scheme as schemePurples} from "./sequential-single/Purples"; -export {default as interpolateReds, scheme as schemeReds} from "./sequential-single/Reds"; -export {default as interpolateOranges, scheme as schemeOranges} from "./sequential-single/Oranges"; diff --git a/src/libs/d3-scale-chromatic/ramp.js b/src/libs/d3-scale-chromatic/ramp.js deleted file mode 100644 index f138a9b..0000000 --- a/src/libs/d3-scale-chromatic/ramp.js +++ /dev/null @@ -1,5 +0,0 @@ -import d3 from 'd3'; - -export default function(scheme) { - return d3.interpolateRgbBasis(scheme[scheme.length - 1]); -} diff --git a/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js b/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js deleted file mode 100644 index e7dade7..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5f999d8c92ca25f", - "edf8fbb2e2e266c2a4238b45", - "edf8fbb2e2e266c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js b/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js deleted file mode 100644 index 8aa9232..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0ecf49ebcda8856a7", - "edf8fbb3cde38c96c688419d", - "edf8fbb3cde38c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js b/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js deleted file mode 100644 index c8dae65..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0f3dba8ddb543a2ca", - "f0f9e8bae4bc7bccc42b8cbe", - "f0f9e8bae4bc7bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js b/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js deleted file mode 100644 index 3f96f7d..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee8c8fdbb84e34a33", - "fef0d9fdcc8afc8d59d7301f", - "fef0d9fdcc8afc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js b/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js deleted file mode 100644 index c279e48..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece7f2a6bddb2b8cbe", - "f1eef6bdc9e174a9cf0570b0", - "f1eef6bdc9e174a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js b/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js deleted file mode 100644 index f6d8fe0..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece2f0a6bddb1c9099", - "f6eff7bdc9e167a9cf02818a", - "f6eff7bdc9e167a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js b/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js deleted file mode 100644 index fe762d2..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e7e1efc994c7dd1c77", - "f1eef6d7b5d8df65b0ce1256", - "f1eef6d7b5d8df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js b/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js deleted file mode 100644 index 748939c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fde0ddfa9fb5c51b8a", - "feebe2fbb4b9f768a1ae017e", - "feebe2fbb4b9f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js b/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js deleted file mode 100644 index aaacd6c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f7fcb9addd8e31a354", - "ffffccc2e69978c679238443", - "ffffccc2e69978c67931a354006837", - "ffffccd9f0a3addd8e78c67931a354006837", - "ffffccd9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js b/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js deleted file mode 100644 index eb009ef..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "edf8b17fcdbb2c7fb8", - "ffffcca1dab441b6c4225ea8", - "ffffcca1dab441b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js b/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js deleted file mode 100644 index 2fc1aa1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fff7bcfec44fd95f0e", - "ffffd4fed98efe9929cc4c02", - "ffffd4fed98efe9929d95f0e993404", - "ffffd4fee391fec44ffe9929d95f0e993404", - "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js b/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js deleted file mode 100644 index d34cca6..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ffeda0feb24cf03b20", - "ffffb2fecc5cfd8d3ce31a1c", - "ffffb2fecc5cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Blues.js b/src/libs/d3-scale-chromatic/sequential-single/Blues.js deleted file mode 100644 index cb36bf7..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Blues.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "deebf79ecae13182bd", - "eff3ffbdd7e76baed62171b5", - "eff3ffbdd7e76baed63182bd08519c", - "eff3ffc6dbef9ecae16baed63182bd08519c", - "eff3ffc6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Greens.js b/src/libs/d3-scale-chromatic/sequential-single/Greens.js deleted file mode 100644 index 074f5bf..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Greens.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5e0a1d99b31a354", - "edf8e9bae4b374c476238b45", - "edf8e9bae4b374c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Greys.js b/src/libs/d3-scale-chromatic/sequential-single/Greys.js deleted file mode 100644 index ae5a0b4..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Greys.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f0f0f0bdbdbd636363", - "f7f7f7cccccc969696525252", - "f7f7f7cccccc969696636363252525", - "f7f7f7d9d9d9bdbdbd969696636363252525", - "f7f7f7d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Oranges.js b/src/libs/d3-scale-chromatic/sequential-single/Oranges.js deleted file mode 100644 index a4babe1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Oranges.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee6cefdae6be6550d", - "feeddefdbe85fd8d3cd94701", - "feeddefdbe85fd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Purples.js b/src/libs/d3-scale-chromatic/sequential-single/Purples.js deleted file mode 100644 index d9810e1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Purples.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "efedf5bcbddc756bb1", - "f2f0f7cbc9e29e9ac86a51a3", - "f2f0f7cbc9e29e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Reds.js b/src/libs/d3-scale-chromatic/sequential-single/Reds.js deleted file mode 100644 index 447084c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Reds.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee0d2fc9272de2d26", - "fee5d9fcae91fb6a4acb181d", - "fee5d9fcae91fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/polygrafill/README.md b/src/libs/polygrafill/README.md deleted file mode 100644 index 15b7159..0000000 --- a/src/libs/polygrafill/README.md +++ /dev/null @@ -1,8 +0,0 @@ -1. @grafana/data is not supported in grafana 5.x and 6.2. The workaround is -the module `./libs/grafana/events` that include copy-pasted events -from @grafana/data and app/core from grafana sources. - -2. Newly Grafana versions flood Console with -"Usage strings as events is deprecated ..." messages. -This module has a function to detect if Grafana’s Emitter support AppEvent style event ids. - diff --git a/src/module.ts b/src/module.ts index 4daa71d..ac8cebe 100644 --- a/src/module.ts +++ b/src/module.ts @@ -15,10 +15,10 @@ import { loadPluginCss } from 'grafana/app/plugins/sdk'; // Types import { MetricsPanelCtrl } from 'grafana/app/plugins/sdk'; import { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv'; -import { CoreEvents, PanelEvents } from './libs/grafana/events/index'; +import { CoreEvents, PanelEvents } from './util/grafana/events/index'; import { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data'; import rendering from './rendering'; -import { Polygrafill } from './libs/polygrafill/index'; +import { Polygrafill } from './util/polygrafill/index'; import { ColorModeDiscrete } from './color_mode_discrete'; diff --git a/src/plugin.json b/src/plugin.json index ea76fa3..779c176 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -16,7 +16,8 @@ }, "links": [ {"name": "Github", "url": "https://github.com/flant/grafana-statusmap"}, - {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"} + {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"}, + {"name": "Developer", "url": "https://flant.com"} ], "screenshots": [ {"name": "Panel with light theme", "path": "img/flant-statusmap-panel.png"}, @@ -24,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.3.4", - "updated": "2020-09-12" + "version": "%VERSION%", + "updated": "%TODAY%" }, "dependencies": { diff --git a/src/rendering.ts b/src/rendering.ts index 082a1f4..17d8d93 100644 --- a/src/rendering.ts +++ b/src/rendering.ts @@ -8,12 +8,12 @@ import moment from 'moment'; import kbn from 'grafana/app/core/utils/kbn'; import { appEvents, contextSrv } from 'grafana/app/core/core'; import * as d3 from 'd3'; -import { d3ScaleChromatic } from './d3/d3-scale-chromatic'; +import { d3ScaleChromatic } from './util/d3/d3-scale-chromatic'; import { StatusmapTooltip } from './tooltip'; import { AnnotationTooltip } from './annotations'; import { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data'; import { StatusHeatmapCtrl, renderComplete } from './module'; -import { CoreEvents, PanelEvents } from './libs/grafana/events/index'; +import { CoreEvents, PanelEvents } from './util/grafana/events/index'; let MIN_CARD_SIZE = 5, CARD_H_SPACING = 2, diff --git a/src/d3/d3-scale-chromatic.ts b/src/util/d3/d3-scale-chromatic.ts similarity index 95% rename from src/d3/d3-scale-chromatic.ts rename to src/util/d3/d3-scale-chromatic.ts index 783724d..e884136 100644 --- a/src/d3/d3-scale-chromatic.ts +++ b/src/util/d3/d3-scale-chromatic.ts @@ -1,6 +1,8 @@ import * as d3 from 'd3'; import * as d3ScaleChromaticOrig from 'd3-scale-chromatic'; +// Add GnYlRd color schema to d3-scale-chromatic + let GnYlRdScheme = new Array(3) .concat( '91cf60ffffbffc8d59', diff --git a/src/libs/grafana/events/appEvents.ts b/src/util/grafana/events/appEvents.ts similarity index 100% rename from src/libs/grafana/events/appEvents.ts rename to src/util/grafana/events/appEvents.ts diff --git a/src/libs/grafana/events/events.ts b/src/util/grafana/events/events.ts similarity index 100% rename from src/libs/grafana/events/events.ts rename to src/util/grafana/events/events.ts diff --git a/src/libs/grafana/events/index.ts b/src/util/grafana/events/index.ts similarity index 100% rename from src/libs/grafana/events/index.ts rename to src/util/grafana/events/index.ts diff --git a/src/libs/grafana/events/panelEvents.ts b/src/util/grafana/events/panelEvents.ts similarity index 100% rename from src/libs/grafana/events/panelEvents.ts rename to src/util/grafana/events/panelEvents.ts diff --git a/dist/libs/polygrafill/README.md b/src/util/polygrafill/README.md similarity index 83% rename from dist/libs/polygrafill/README.md rename to src/util/polygrafill/README.md index 15b7159..dfd486a 100644 --- a/dist/libs/polygrafill/README.md +++ b/src/util/polygrafill/README.md @@ -1,5 +1,5 @@ 1. @grafana/data is not supported in grafana 5.x and 6.2. The workaround is -the module `./libs/grafana/events` that include copy-pasted events +the module `./util/grafana/events` that include copy-pasted events from @grafana/data and app/core from grafana sources. 2. Newly Grafana versions flood Console with diff --git a/src/libs/polygrafill/funcs.ts b/src/util/polygrafill/funcs.ts similarity index 100% rename from src/libs/polygrafill/funcs.ts rename to src/util/polygrafill/funcs.ts diff --git a/src/libs/polygrafill/index.ts b/src/util/polygrafill/index.ts similarity index 100% rename from src/libs/polygrafill/index.ts rename to src/util/polygrafill/index.ts diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..0452af2 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,15 @@ +// Copy screenshots defined in plugin.json. + +const path = require('path'); +const pluginJson = require(path.resolve(process.cwd(), 'src/plugin.json')); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports.getWebpackConfig = (config, options) => ({ + ...config, + plugins: [...config.plugins, new CopyWebpackPlugin( + pluginJson.info.screenshots.map(function(item) { + return {from: "../docs/"+item.path, to: "./img"} + }), + { logLevel: options.watch ? 'silent' : 'warn' } + ) ], +});