diff --git a/asset-manifest.json b/asset-manifest.json index 616ef0e..0f5d11e 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,7 +1,7 @@ { "files": { "main.css": "/cht-tech-radar-contributors/static/css/main.2624eacc.css", - "main.js": "/cht-tech-radar-contributors/static/js/main.4cbee5cb.js", + "main.js": "/cht-tech-radar-contributors/static/js/main.07772151.js", "static/media/overview.svg": "/cht-tech-radar-contributors/static/media/overview.2e91b190e821b00544b6.svg", "static/media/question.svg": "/cht-tech-radar-contributors/static/media/question.f49af21b0654459dca13.svg", "static/media/search.svg": "/cht-tech-radar-contributors/static/media/search.679b98f82ae5196a396b.svg", @@ -17,6 +17,6 @@ }, "entrypoints": [ "static/css/main.2624eacc.css", - "static/js/main.4cbee5cb.js" + "static/js/main.07772151.js" ] } \ No newline at end of file diff --git a/help-and-about-tech-radar.html b/help-and-about-tech-radar.html index 1b73155..63b9fea 100644 --- a/help-and-about-tech-radar.html +++ b/help-and-about-tech-radar.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/index.html b/index.html index 1b73155..63b9fea 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/languages-and-frameworks.html b/languages-and-frameworks.html index 1b73155..63b9fea 100644 --- a/languages-and-frameworks.html +++ b/languages-and-frameworks.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/languages-and-frameworks/angular.html b/languages-and-frameworks/angular.html index 5c0910e..247201e 100644 --- a/languages-and-frameworks/angular.html +++ b/languages-and-frameworks/angular.html @@ -1,2 +1,2 @@ -Angular | CHT Technology Radar for Contributors

Angular

The web framework for CHT webapp.

+Angular | CHT Technology Radar for Contributors

Angular

The web framework for CHT webapp.

\ No newline at end of file diff --git a/languages-and-frameworks/angularjs.html b/languages-and-frameworks/angularjs.html index 9a80f6d..32cbec0 100644 --- a/languages-and-frameworks/angularjs.html +++ b/languages-and-frameworks/angularjs.html @@ -1,2 +1,2 @@ -AngularJS | CHT Technology Radar for Contributors

AngularJS

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

+AngularJS | CHT Technology Radar for Contributors

AngularJS

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

\ No newline at end of file diff --git a/languages-and-frameworks/bash.html b/languages-and-frameworks/bash.html index ea3adb8..5507d79 100644 --- a/languages-and-frameworks/bash.html +++ b/languages-and-frameworks/bash.html @@ -1,2 +1,2 @@ -BASH | CHT Technology Radar for Contributors

BASH

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

+BASH | CHT Technology Radar for Contributors

BASH

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

\ No newline at end of file diff --git a/languages-and-frameworks/css.html b/languages-and-frameworks/css.html index 649a480..249b046 100644 --- a/languages-and-frameworks/css.html +++ b/languages-and-frameworks/css.html @@ -1,2 +1,2 @@ -CSS | CHT Technology Radar for Contributors

CSS

CSS.

+CSS | CHT Technology Radar for Contributors

CSS

CSS.

\ No newline at end of file diff --git a/languages-and-frameworks/enketo.html b/languages-and-frameworks/enketo.html index db13105..76d2b69 100644 --- a/languages-and-frameworks/enketo.html +++ b/languages-and-frameworks/enketo.html @@ -1,2 +1,2 @@ -Enketo | CHT Technology Radar for Contributors

Enketo

JavaScript library for rendering xforms as HTML with CSS and JS.

+Enketo | CHT Technology Radar for Contributors

Enketo

JavaScript library for rendering xforms as HTML with CSS and JS.

\ No newline at end of file diff --git a/languages-and-frameworks/javascript.html b/languages-and-frameworks/javascript.html index 530a249..d487f58 100644 --- a/languages-and-frameworks/javascript.html +++ b/languages-and-frameworks/javascript.html @@ -1,2 +1,2 @@ -JavaScript | CHT Technology Radar for Contributors

JavaScript

Primary programming language used everywhere in the CHT.

+JavaScript | CHT Technology Radar for Contributors

JavaScript

Primary programming language used everywhere in the CHT.

\ No newline at end of file diff --git a/languages-and-frameworks/lua.html b/languages-and-frameworks/lua.html index 3f8877e..5ccfb37 100644 --- a/languages-and-frameworks/lua.html +++ b/languages-and-frameworks/lua.html @@ -1,3 +1,3 @@ -lua | CHT Technology Radar for Contributors

lua

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

+lua | CHT Technology Radar for Contributors

lua

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

lua website

\ No newline at end of file diff --git a/languages-and-frameworks/nodejs.html b/languages-and-frameworks/nodejs.html index 44447df..5a43ee5 100644 --- a/languages-and-frameworks/nodejs.html +++ b/languages-and-frameworks/nodejs.html @@ -1,2 +1,2 @@ -node.js | CHT Technology Radar for Contributors

node.js

Used for services on the server like API and Sentinel as well as scripting.

+node.js | CHT Technology Radar for Contributors

node.js

Used for services on the server like API and Sentinel as well as scripting.

\ No newline at end of file diff --git a/languages-and-frameworks/pouchdb.html b/languages-and-frameworks/pouchdb.html index d078fbf..3db51ce 100644 --- a/languages-and-frameworks/pouchdb.html +++ b/languages-and-frameworks/pouchdb.html @@ -1,3 +1,3 @@ -PouchDB | CHT Technology Radar for Contributors

PouchDB

JavaScript library for storing data on the phone in the CHT webapp. +PouchDB | CHT Technology Radar for Contributors

PouchDB

JavaScript library for storing data on the phone in the CHT webapp. Also used as a library for querying CouchDB from api, sentinel, and the admin app.

\ No newline at end of file diff --git a/languages-and-frameworks/protractor.html b/languages-and-frameworks/protractor.html index d380dc2..c218b81 100644 --- a/languages-and-frameworks/protractor.html +++ b/languages-and-frameworks/protractor.html @@ -1,2 +1,2 @@ -Protractor | CHT Technology Radar for Contributors

Protractor

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

+Protractor | CHT Technology Radar for Contributors

Protractor

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

\ No newline at end of file diff --git a/languages-and-frameworks/python.html b/languages-and-frameworks/python.html index e0ec63d..3820a4f 100644 --- a/languages-and-frameworks/python.html +++ b/languages-and-frameworks/python.html @@ -1,2 +1,2 @@ -Python | CHT Technology Radar for Contributors

Python

Used to convert xls forms to xforms in cht-conf.

+Python | CHT Technology Radar for Contributors

Python

Used to convert xls forms to xforms in cht-conf.

\ No newline at end of file diff --git a/languages-and-frameworks/typescript.html b/languages-and-frameworks/typescript.html index 804d9d6..afcce07 100644 --- a/languages-and-frameworks/typescript.html +++ b/languages-and-frameworks/typescript.html @@ -1,2 +1,2 @@ -TypeScript | CHT Technology Radar for Contributors

TypeScript

Used a lot in CHT webapp with the potential to use it more widely.

+TypeScript | CHT Technology Radar for Contributors

TypeScript

Used a lot in CHT webapp with the potential to use it more widely.

\ No newline at end of file diff --git a/languages-and-frameworks/webdriverio.html b/languages-and-frameworks/webdriverio.html index dfe2f74..862d4c9 100644 --- a/languages-and-frameworks/webdriverio.html +++ b/languages-and-frameworks/webdriverio.html @@ -1,2 +1,2 @@ -WebDriverIO | CHT Technology Radar for Contributors

WebDriverIO

UI testing framework used for end-to-end testing in web applications.

+WebDriverIO | CHT Technology Radar for Contributors

WebDriverIO

UI testing framework used for end-to-end testing in web applications.

\ No newline at end of file diff --git a/logo.svg b/logo.svg index afb225f..40495a6 100644 --- a/logo.svg +++ b/logo.svg @@ -1,48 +1,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + diff --git a/methods-and-patterns.html b/methods-and-patterns.html index 1b73155..63b9fea 100644 --- a/methods-and-patterns.html +++ b/methods-and-patterns.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/methods-and-patterns/continuous-discovery.html b/methods-and-patterns/continuous-discovery.html index 574b5af..99f2843 100644 --- a/methods-and-patterns/continuous-discovery.html +++ b/methods-and-patterns/continuous-discovery.html @@ -1,2 +1,2 @@ -Continuous Discovery | CHT Technology Radar for Contributors

Continuous Discovery

Documentation

+Continuous Discovery | CHT Technology Radar for Contributors

Continuous Discovery

\ No newline at end of file diff --git a/methods-and-patterns/pwa.html b/methods-and-patterns/pwa.html index 9c7f96a..5767439 100644 --- a/methods-and-patterns/pwa.html +++ b/methods-and-patterns/pwa.html @@ -1,2 +1,2 @@ -PWA | CHT Technology Radar for Contributors

PWA

Followed for CHT webapp to allow offline first capability.

+PWA | CHT Technology Radar for Contributors

PWA

Followed for CHT webapp to allow offline first capability.

\ No newline at end of file diff --git a/methods-and-patterns/quality-assistance.html b/methods-and-patterns/quality-assistance.html index c981d89..dffc8ff 100644 --- a/methods-and-patterns/quality-assistance.html +++ b/methods-and-patterns/quality-assistance.html @@ -1,2 +1,2 @@ -Quality Assistance | CHT Technology Radar for Contributors

Quality Assistance

Documentation

+Quality Assistance | CHT Technology Radar for Contributors

Quality Assistance

\ No newline at end of file diff --git a/overview.html b/overview.html index 1b73155..63b9fea 100644 --- a/overview.html +++ b/overview.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/platforms-and-aoe-services.html b/platforms-and-aoe-services.html index 1b73155..63b9fea 100644 --- a/platforms-and-aoe-services.html +++ b/platforms-and-aoe-services.html @@ -1 +1 @@ -CHT Technology Radar for Contributors
\ No newline at end of file +CHT Technology Radar for Contributors
\ No newline at end of file diff --git a/platforms-and-aoe-services/android-dev.html b/platforms-and-aoe-services/android-dev.html index 40a0a5c..03d778b 100644 --- a/platforms-and-aoe-services/android-dev.html +++ b/platforms-and-aoe-services/android-dev.html @@ -1,2 +1,2 @@ -Android Development | CHT Technology Radar for Contributors

Android Development

Android APKs are created to wrap the CHT webapp in a native app.

+Android Development | CHT Technology Radar for Contributors

Android Development

Android APKs are created to wrap the CHT webapp in a native app.

\ No newline at end of file diff --git a/platforms-and-aoe-services/aws.html b/platforms-and-aoe-services/aws.html index 9338479..ef78e36 100644 --- a/platforms-and-aoe-services/aws.html +++ b/platforms-and-aoe-services/aws.html @@ -1,2 +1,2 @@ -AWS | CHT Technology Radar for Contributors

AWS

Cloud provider used for Medic hosted services.

+AWS | CHT Technology Radar for Contributors

AWS

Cloud provider used for Medic hosted services.

\ No newline at end of file diff --git a/rd.json b/rd.json index a805734..3780d95 100644 --- a/rd.json +++ b/rd.json @@ -1 +1 @@ -{"items":[{"flag":"default","featured":true,"revisions":[{"name":"android-dev","release":"2023-09-12","title":"Android Development","ring":"adopt","quadrant":"platforms-and-aoe-services","tags":["app-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/android-dev.md","body":"

Android APKs are created to wrap the CHT webapp in a native app.

\n"}],"name":"android-dev","title":"Android Development","ring":"adopt","quadrant":"platforms-and-aoe-services","body":"

Android APKs are created to wrap the CHT webapp in a native app.

\n","info":"","angleFraction":0.9988724435262717,"radiusFraction":0.17558415334482036,"release":"2023-09-12","tags":["app-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/android-dev.md"},{"flag":"default","featured":true,"revisions":[{"name":"angular","release":"2023-09-12","title":"Angular","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angular.md","body":"

The web framework for CHT webapp.

\n"}],"name":"angular","title":"Angular","ring":"adopt","quadrant":"languages-and-frameworks","body":"

The web framework for CHT webapp.

\n","info":"","angleFraction":0.5734623975786861,"radiusFraction":0.5459702266263133,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angular.md"},{"flag":"default","featured":true,"revisions":[{"name":"angularjs","release":"2023-09-12","title":"AngularJS","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angularjs.md","body":"

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

\n"}],"name":"angularjs","title":"AngularJS","ring":"stop","quadrant":"languages-and-frameworks","body":"

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

\n","info":"","angleFraction":0.7076804247342143,"radiusFraction":0.2593597753644201,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angularjs.md"},{"flag":"default","featured":true,"revisions":[{"name":"aws","release":"2023-09-12","title":"AWS","ring":"adopt","quadrant":"platforms-and-aoe-services","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/aws.md","body":"

Cloud provider used for Medic hosted services.

\n"}],"name":"aws","title":"AWS","ring":"adopt","quadrant":"platforms-and-aoe-services","body":"

Cloud provider used for Medic hosted services.

\n","info":"","angleFraction":0.5651915557681579,"radiusFraction":0.033345085736348645,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/aws.md"},{"flag":"default","featured":true,"revisions":[{"name":"bash","release":"2023-09-12","title":"BASH","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/bash.md","body":"

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

\n"}],"name":"bash","title":"BASH","ring":"stop","quadrant":"languages-and-frameworks","body":"

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

\n","info":"","angleFraction":0.2574730933713796,"radiusFraction":0.915935234679778,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/bash.md"},{"flag":"default","featured":true,"revisions":[{"name":"continuous-discovery","release":"2023-09-12","title":"Continuous Discovery","ring":"adopt","quadrant":"methods-and-patterns","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/continuous-discovery.md","body":"

Documentation

\n"}],"name":"continuous-discovery","title":"Continuous Discovery","ring":"adopt","quadrant":"methods-and-patterns","body":"

Documentation

\n","info":"","angleFraction":0.8302697535248311,"radiusFraction":0.38081292786749743,"release":"2023-09-12","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/continuous-discovery.md"},{"flag":"default","featured":true,"revisions":[{"name":"couch2pg","release":"2023-09-12","title":"couch2pg","ring":"stop","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couch2pg.md","body":"

Maintenance: look into cht-sync and cht-pipeline instead.

\n"}],"name":"couch2pg","title":"couch2pg","ring":"stop","quadrant":"tools","body":"

Maintenance: look into cht-sync and cht-pipeline instead.

\n","info":"","angleFraction":0.3545557182297434,"radiusFraction":0.11335327044884647,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couch2pg.md"},{"flag":"default","featured":true,"revisions":[{"name":"couchdb","release":"2023-09-12","title":"CouchDB","ring":"adopt","quadrant":"tools","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couchdb.md","body":"

CouchDB is the primary DB for the CHT.

\n"}],"name":"couchdb","title":"CouchDB","ring":"adopt","quadrant":"tools","body":"

CouchDB is the primary DB for the CHT.

\n","info":"","angleFraction":0.7065626322909933,"radiusFraction":0.6781474372814349,"release":"2023-09-12","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couchdb.md"},{"flag":"default","featured":true,"revisions":[{"name":"css","release":"2023-09-12","title":"CSS","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/css.md","body":"

CSS.

\n"}],"name":"css","title":"CSS","ring":"adopt","quadrant":"languages-and-frameworks","body":"

CSS.

\n","info":"","angleFraction":0.9248604726634579,"radiusFraction":0.9251744363003678,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/css.md"},{"flag":"default","featured":true,"revisions":[{"name":"dbt","release":"2023-09-12","title":"DBT","ring":"assess","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dbt.md","body":"

Runs data tests and migrations for cht-sync.

\n"}],"name":"dbt","title":"DBT","ring":"assess","quadrant":"tools","body":"

Runs data tests and migrations for cht-sync.

\n","info":"","angleFraction":0.47476416526791665,"radiusFraction":0.5849304203517611,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dbt.md"},{"flag":"default","featured":true,"revisions":[{"name":"docker","release":"2023-09-12","title":"Docker","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/docker.md","body":"

Used extensively for containerizing CHT products.

\n"}],"name":"docker","title":"Docker","ring":"adopt","quadrant":"tools","body":"

Used extensively for containerizing CHT products.

\n","info":"","angleFraction":0.5346267693259819,"radiusFraction":0.010802641337622099,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/docker.md"},{"flag":"default","featured":true,"revisions":[{"name":"dot","release":"2023-09-12","title":"DOT","ring":"trial","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dot.md","body":"

Data Observation Toolkit that DataKind built and we run with MoH UG.

\n"}],"name":"dot","title":"DOT","ring":"trial","quadrant":"tools","body":"

Data Observation Toolkit that DataKind built and we run with MoH UG.

\n","info":"","angleFraction":0.05699283095949381,"radiusFraction":0.4138316389366694,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dot.md"},{"flag":"default","featured":true,"revisions":[{"name":"enketo","release":"2023-09-12","title":"Enketo","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/enketo.md","body":"

JavaScript library for rendering xforms as HTML with CSS and JS.

\n"}],"name":"enketo","title":"Enketo","ring":"adopt","quadrant":"languages-and-frameworks","body":"

JavaScript library for rendering xforms as HTML with CSS and JS.

\n","info":"","angleFraction":0.34002163280877107,"radiusFraction":0.7899365372762628,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/enketo.md"},{"flag":"default","featured":true,"revisions":[{"name":"git","release":"2023-09-12","title":"git","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/git.md","body":"

Primary content version system.

\n"}],"name":"git","title":"git","ring":"adopt","quadrant":"tools","body":"

Primary content version system.

\n","info":"","angleFraction":0.1957511525508726,"radiusFraction":0.2576261432082976,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/git.md"},{"flag":"default","featured":true,"revisions":[{"name":"github-actions","release":"2023-09-12","title":"GitHub Actions","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/github-actions.md","body":"

Used extensively for CI across CHT products including testing and releasing.

\n"}],"name":"github-actions","title":"GitHub Actions","ring":"adopt","quadrant":"tools","body":"

Used extensively for CI across CHT products including testing and releasing.

\n","info":"","angleFraction":0.5927977432417606,"radiusFraction":0.4000312911126036,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/github-actions.md"},{"flag":"changed","featured":true,"revisions":[{"name":"grafana","release":"2023-09-13","title":"Grafana","ring":"adopt","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/grafana.md","body":"

Being evaluated for CHT Watchdog.

\n"},{"name":"grafana","release":"2023-09-12","title":"Grafana","ring":"assess","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grafana.md","body":"

Being evaluated for CHT Watchdog.

\n"}],"name":"grafana","title":"Grafana","ring":"adopt","quadrant":"tools","body":"

Being evaluated for CHT Watchdog.

\n","info":"","angleFraction":0.18827185109519373,"radiusFraction":0.19758038446602932,"release":"2023-09-13","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/grafana.md"},{"flag":"default","featured":false,"revisions":[{"name":"grunt","release":"2023-09-12","title":"Grunt","ring":"stop","quadrant":"tools","tags":["tool"],"featured":false,"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grunt.md","body":"

Deprecated: use native JavaScript instead.

\n"}],"name":"grunt","title":"Grunt","ring":"stop","quadrant":"tools","body":"

Deprecated: use native JavaScript instead.

\n","info":"","angleFraction":0.8162804629281886,"radiusFraction":0.5012804727029636,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grunt.md"},{"flag":"default","featured":true,"revisions":[{"name":"haproxy","release":"2023-09-12","title":"HAProxy","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/haproxy.md","body":"

Used for audit logging and load balancing CouchDB cluster. Due for re-evaluation.

\n"}],"name":"haproxy","title":"HAProxy","ring":"assess","quadrant":"tools","body":"

Used for audit logging and load balancing CouchDB cluster. Due for re-evaluation.

\n","info":"","angleFraction":0.6319993666524435,"radiusFraction":0.9913695884518636,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/haproxy.md"},{"flag":"default","featured":true,"revisions":[{"name":"javascript","release":"2023-09-12","title":"JavaScript","ring":"adopt","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/javascript.md","body":"

Primary programming language used everywhere in the CHT.

\n"}],"name":"javascript","title":"JavaScript","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Primary programming language used everywhere in the CHT.

\n","info":"","angleFraction":0.8691629779087391,"radiusFraction":0.7229884389649193,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/javascript.md"},{"flag":"changed","featured":true,"revisions":[{"name":"k3d","release":"2023-09-13","title":"k3d","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/k3d.md","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n"},{"name":"k3d","release":"2023-09-12","title":"k3d","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/k3d.md","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n"}],"name":"k3d","title":"k3d","ring":"adopt","quadrant":"tools","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n","info":"","angleFraction":0.8311159253653577,"radiusFraction":0.6991171683924278,"release":"2023-09-13","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/k3d.md"},{"flag":"default","featured":true,"revisions":[{"name":"klipfolio","release":"2023-09-12","title":"Klipfolio","ring":"adopt","quadrant":"tools","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/klipfolio.md","body":"

Klipfolio is a paid third-party SAAS option for building dashboards.

\n

From Wikipedia article:\nKlipfolio offers an online dashboard platform for building real-time business dashboards. It allows business users to connect to many data services, automate data retrieval, and then manipulate, and visualize the data. Klipfolio uses a schema-less architecture that allows non-technical end users to more easily connect to data sources, and separates data from presentation to more efficiently use and reuse data sources throughout the platform.

\n

Klipfolio has built-in formula editing, allowing end-users to transform, combine, slice, and filter any data before visualizing it. Users are able to access the dashboard from their desktop, tablet, TV, and mobile phone, and share it with colleagues by granting access to the dashboard, or by scheduling email reports.

\n"}],"name":"klipfolio","title":"Klipfolio","ring":"adopt","quadrant":"tools","body":"

Klipfolio is a paid third-party SAAS option for building dashboards.

\n

From Wikipedia article:\nKlipfolio offers an online dashboard platform for building real-time business dashboards. It allows business users to connect to many data services, automate data retrieval, and then manipulate, and visualize the data. Klipfolio uses a schema-less architecture that allows non-technical end users to more easily connect to data sources, and separates data from presentation to more efficiently use and reuse data sources throughout the platform.

\n

Klipfolio has built-in formula editing, allowing end-users to transform, combine, slice, and filter any data before visualizing it. Users are able to access the dashboard from their desktop, tablet, TV, and mobile phone, and share it with colleagues by granting access to the dashboard, or by scheduling email reports.

\n","info":"","angleFraction":0.46222794820270807,"radiusFraction":0.7855616871806161,"release":"2023-09-12","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/klipfolio.md"},{"flag":"changed","featured":true,"revisions":[{"name":"kubernetes","release":"2023-09-13","title":"Kubernetes","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/kubernetes.md","body":"

Only needed for Medic hosting right now.

\n"},{"name":"kubernetes","release":"2023-09-12","title":"Kubernetes","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/kubernetes.md","body":"

Only needed for Medic hosting right now.

\n"}],"name":"kubernetes","title":"Kubernetes","ring":"adopt","quadrant":"tools","body":"

Only needed for Medic hosting right now.

\n","info":"","angleFraction":0.5676063513401028,"radiusFraction":0.1296550600764783,"release":"2023-09-13","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/kubernetes.md"},{"flag":"default","featured":true,"revisions":[{"name":"lua","release":"2023-09-12","title":"lua","ring":"assess","quadrant":"languages-and-frameworks","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/lua.md","body":"

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

\n

lua website

\n"}],"name":"lua","title":"lua","ring":"assess","quadrant":"languages-and-frameworks","body":"

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

\n

lua website

\n","info":"","angleFraction":0.3486611737138736,"radiusFraction":0.4138784490114997,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/lua.md"},{"flag":"default","featured":true,"revisions":[{"name":"nginx","release":"2023-09-12","title":"Nginx","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nginx.md","body":"

Provides SSL termination for self-hosted CHT deployments.

\n"}],"name":"nginx","title":"Nginx","ring":"adopt","quadrant":"tools","body":"

Provides SSL termination for self-hosted CHT deployments.

\n","info":"","angleFraction":0.6061756217902774,"radiusFraction":0.7459255811575121,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nginx.md"},{"flag":"default","featured":true,"revisions":[{"name":"nodejs","release":"2023-09-12","title":"node.js","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nodejs.md","body":"

Used for services on the server like API and Sentinel as well as scripting.

\n"}],"name":"nodejs","title":"node.js","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Used for services on the server like API and Sentinel as well as scripting.

\n","info":"","angleFraction":0.6071076089026266,"radiusFraction":0.23283173051700023,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nodejs.md"},{"flag":"default","featured":true,"revisions":[{"name":"npm","release":"2023-09-12","title":"npm","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/npm.md","body":"

JavaScript package repository used widely for CHT products.

\n"}],"name":"npm","title":"npm","ring":"adopt","quadrant":"tools","body":"

JavaScript package repository used widely for CHT products.

\n","info":"","angleFraction":0.7174979557095831,"radiusFraction":0.21056112358972223,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/npm.md"},{"flag":"default","featured":true,"revisions":[{"name":"postgres","release":"2023-09-12","title":"Postgres","ring":"adopt","quadrant":"tools","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/postgres.md","body":"

Primarily used as a data warehouse for analytics queries.

\n"}],"name":"postgres","title":"Postgres","ring":"adopt","quadrant":"tools","body":"

Primarily used as a data warehouse for analytics queries.

\n","info":"","angleFraction":0.4176438938017357,"radiusFraction":0.20100741669187894,"release":"2023-09-12","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/postgres.md"},{"flag":"default","featured":true,"revisions":[{"name":"pouchdb","release":"2023-09-12","title":"PouchDB","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pouchdb.md","body":"

JavaScript library for storing data on the phone in the CHT webapp. \nAlso used as a library for querying CouchDB from api, sentinel, and the admin app.

\n"}],"name":"pouchdb","title":"PouchDB","ring":"adopt","quadrant":"languages-and-frameworks","body":"

JavaScript library for storing data on the phone in the CHT webapp. \nAlso used as a library for querying CouchDB from api, sentinel, and the admin app.

\n","info":"","angleFraction":0.2807245395419069,"radiusFraction":0.08899395278578748,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pouchdb.md"},{"flag":"changed","featured":true,"revisions":[{"name":"prometheus","release":"2023-09-13","title":"Prometheus","ring":"adopt","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/prometheus.md","body":"

Being evaluated for CHT Watchdog.

\n"},{"name":"prometheus","release":"2023-09-12","title":"Prometheus","ring":"assess","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/prometheus.md","body":"

Being evaluated for CHT Watchdog.

\n"}],"name":"prometheus","title":"Prometheus","ring":"adopt","quadrant":"tools","body":"

Being evaluated for CHT Watchdog.

\n","info":"","angleFraction":0.6829919814144427,"radiusFraction":0.16031546197145174,"release":"2023-09-13","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/prometheus.md"},{"flag":"default","featured":true,"revisions":[{"name":"protractor","release":"2023-09-12","title":"Protractor","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/protractor.md","body":"

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

\n"}],"name":"protractor","title":"Protractor","ring":"stop","quadrant":"languages-and-frameworks","body":"

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

\n","info":"","angleFraction":0.8913218248618049,"radiusFraction":0.76998508359632,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/protractor.md"},{"flag":"default","featured":true,"revisions":[{"name":"pwa","release":"2023-09-12","title":"PWA","ring":"adopt","quadrant":"methods-and-patterns","tags":["technique"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pwa.md","body":"

Followed for CHT webapp to allow offline first capability.

\n"}],"name":"pwa","title":"PWA","ring":"adopt","quadrant":"methods-and-patterns","body":"

Followed for CHT webapp to allow offline first capability.

\n","info":"","angleFraction":0.4596629536763204,"radiusFraction":0.11345382674120419,"release":"2023-09-12","tags":["technique"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pwa.md"},{"flag":"default","featured":true,"revisions":[{"name":"python","release":"2023-09-12","title":"Python","ring":"stop","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/python.md","body":"

Used to convert xls forms to xforms in cht-conf.

\n"}],"name":"python","title":"Python","ring":"stop","quadrant":"languages-and-frameworks","body":"

Used to convert xls forms to xforms in cht-conf.

\n","info":"","angleFraction":0.1549290786759714,"radiusFraction":0.38145510620454215,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/python.md"},{"flag":"default","featured":true,"revisions":[{"name":"quality-assistance","release":"2023-09-12","title":"Quality Assistance","ring":"adopt","quadrant":"methods-and-patterns","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/quality-assistance.md","body":"

Documentation

\n"}],"name":"quality-assistance","title":"Quality Assistance","ring":"adopt","quadrant":"methods-and-patterns","body":"

Documentation

\n","info":"","angleFraction":0.8593291500444202,"radiusFraction":0.7731485832482583,"release":"2023-09-12","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/quality-assistance.md"},{"flag":"new","featured":true,"revisions":[{"name":"sonar","release":"2023-09-13","title":"Sonar","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/sonar.md","body":"

Sonar static analysis supports development by providing feedback on code quality and security issues. Sonar analysis must pass on all new code.

\n

SonarCloud can be enabled on any public repo in the Medic organization.

\n

Documentation

\n"}],"name":"sonar","title":"Sonar","ring":"adopt","quadrant":"tools","body":"

Sonar static analysis supports development by providing feedback on code quality and security issues. Sonar analysis must pass on all new code.

\n

SonarCloud can be enabled on any public repo in the Medic organization.

\n

Documentation

\n","info":"","angleFraction":0.4715964955314942,"radiusFraction":0.14165596477583864,"release":"2023-09-13","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/sonar.md"},{"flag":"default","featured":true,"revisions":[{"name":"superset","release":"2023-09-12","title":"Superset","ring":"adopt","quadrant":"tools","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/superset.md","body":"

Open source product for configurable dashboards, used for health care analytics.

\n"}],"name":"superset","title":"Superset","ring":"adopt","quadrant":"tools","body":"

Open source product for configurable dashboards, used for health care analytics.

\n","info":"","angleFraction":0.5364773977916293,"radiusFraction":0.9476110628693339,"release":"2023-09-12","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/superset.md"},{"flag":"default","featured":true,"revisions":[{"name":"typescript","release":"2023-09-12","title":"TypeScript","ring":"adopt","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/typescript.md","body":"

Used a lot in CHT webapp with the potential to use it more widely.

\n"}],"name":"typescript","title":"TypeScript","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Used a lot in CHT webapp with the potential to use it more widely.

\n","info":"","angleFraction":0.22457173594286695,"radiusFraction":0.932914512799828,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/typescript.md"},{"flag":"default","featured":true,"revisions":[{"name":"webdriverio","release":"2023-09-12","title":"WebDriverIO","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/webdriverio.md","body":"

UI testing framework used for end-to-end testing in web applications.

\n"}],"name":"webdriverio","title":"WebDriverIO","ring":"adopt","quadrant":"languages-and-frameworks","body":"

UI testing framework used for end-to-end testing in web applications.

\n","info":"","angleFraction":0.3638806988198424,"radiusFraction":0.027439916946845555,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/webdriverio.md"}],"releases":["2023-09-12","2023-09-13"]} \ No newline at end of file +{"items":[{"flag":"default","featured":true,"revisions":[{"name":"android-dev","release":"2023-09-12","title":"Android Development","ring":"adopt","quadrant":"platforms-and-aoe-services","tags":["app-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/android-dev.md","body":"

Android APKs are created to wrap the CHT webapp in a native app.

\n"}],"name":"android-dev","title":"Android Development","ring":"adopt","quadrant":"platforms-and-aoe-services","body":"

Android APKs are created to wrap the CHT webapp in a native app.

\n","info":"","angleFraction":0.9892887814329063,"radiusFraction":0.9787993285326895,"release":"2023-09-12","tags":["app-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/android-dev.md"},{"flag":"default","featured":true,"revisions":[{"name":"angular","release":"2023-09-12","title":"Angular","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angular.md","body":"

The web framework for CHT webapp.

\n"}],"name":"angular","title":"Angular","ring":"adopt","quadrant":"languages-and-frameworks","body":"

The web framework for CHT webapp.

\n","info":"","angleFraction":0.11220635260018019,"radiusFraction":0.17024586244646023,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angular.md"},{"flag":"default","featured":true,"revisions":[{"name":"angularjs","release":"2023-09-12","title":"AngularJS","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angularjs.md","body":"

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

\n"}],"name":"angularjs","title":"AngularJS","ring":"stop","quadrant":"languages-and-frameworks","body":"

Obsolete version of Angular, used in the CHT admin app. Deprecated: rewrite to Angular.

\n","info":"","angleFraction":0.825428592222863,"radiusFraction":0.43486137294005633,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/angularjs.md"},{"flag":"default","featured":true,"revisions":[{"name":"aws","release":"2023-09-12","title":"AWS","ring":"adopt","quadrant":"platforms-and-aoe-services","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/aws.md","body":"

Cloud provider used for Medic hosted services.

\n"}],"name":"aws","title":"AWS","ring":"adopt","quadrant":"platforms-and-aoe-services","body":"

Cloud provider used for Medic hosted services.

\n","info":"","angleFraction":0.8509350297006522,"radiusFraction":0.4711023336849467,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/aws.md"},{"flag":"default","featured":true,"revisions":[{"name":"bash","release":"2023-09-12","title":"BASH","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/bash.md","body":"

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

\n"}],"name":"bash","title":"BASH","ring":"stop","quadrant":"languages-and-frameworks","body":"

Used for scripting, but JavaScript is preferred due to being more testable and cross platform compatible.

\n","info":"","angleFraction":0.6786805451604034,"radiusFraction":0.5206845181234427,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/bash.md"},{"flag":"default","featured":true,"revisions":[{"name":"continuous-discovery","release":"2023-09-12","title":"Continuous Discovery","ring":"adopt","quadrant":"methods-and-patterns","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/continuous-discovery.md","body":"

Documentation

\n"}],"name":"continuous-discovery","title":"Continuous Discovery","ring":"adopt","quadrant":"methods-and-patterns","body":"

Documentation

\n","info":"","angleFraction":0.45206109961103147,"radiusFraction":0.561922845044176,"release":"2023-09-12","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/continuous-discovery.md"},{"flag":"default","featured":true,"revisions":[{"name":"couch2pg","release":"2023-09-12","title":"couch2pg","ring":"stop","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couch2pg.md","body":"

Maintenance: look into cht-sync and cht-pipeline instead.

\n"}],"name":"couch2pg","title":"couch2pg","ring":"stop","quadrant":"tools","body":"

Maintenance: look into cht-sync and cht-pipeline instead.

\n","info":"","angleFraction":0.07944904650288365,"radiusFraction":0.6021051414703953,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couch2pg.md"},{"flag":"default","featured":true,"revisions":[{"name":"couchdb","release":"2023-09-12","title":"CouchDB","ring":"adopt","quadrant":"tools","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couchdb.md","body":"

CouchDB is the primary DB for the CHT.

\n"}],"name":"couchdb","title":"CouchDB","ring":"adopt","quadrant":"tools","body":"

CouchDB is the primary DB for the CHT.

\n","info":"","angleFraction":0.7389787674631283,"radiusFraction":0.20994759476359026,"release":"2023-09-12","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/couchdb.md"},{"flag":"default","featured":true,"revisions":[{"name":"css","release":"2023-09-12","title":"CSS","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/css.md","body":"

CSS.

\n"}],"name":"css","title":"CSS","ring":"adopt","quadrant":"languages-and-frameworks","body":"

CSS.

\n","info":"","angleFraction":0.8250240514281919,"radiusFraction":0.7087624464090911,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/css.md"},{"flag":"default","featured":true,"revisions":[{"name":"dbt","release":"2023-09-12","title":"DBT","ring":"assess","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dbt.md","body":"

Runs data tests and migrations for cht-sync.

\n"}],"name":"dbt","title":"DBT","ring":"assess","quadrant":"tools","body":"

Runs data tests and migrations for cht-sync.

\n","info":"","angleFraction":0.7389772960015979,"radiusFraction":0.6823105397471234,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dbt.md"},{"flag":"default","featured":true,"revisions":[{"name":"docker","release":"2023-09-12","title":"Docker","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/docker.md","body":"

Used extensively for containerizing CHT products.

\n"}],"name":"docker","title":"Docker","ring":"adopt","quadrant":"tools","body":"

Used extensively for containerizing CHT products.

\n","info":"","angleFraction":0.8794573483217998,"radiusFraction":0.5566167542450757,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/docker.md"},{"flag":"default","featured":true,"revisions":[{"name":"dot","release":"2023-09-12","title":"DOT","ring":"trial","quadrant":"tools","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dot.md","body":"

Data Observation Toolkit that DataKind built and we run with MoH UG.

\n"}],"name":"dot","title":"DOT","ring":"trial","quadrant":"tools","body":"

Data Observation Toolkit that DataKind built and we run with MoH UG.

\n","info":"","angleFraction":0.4421414278520772,"radiusFraction":0.07114242644523361,"release":"2023-09-12","tags":["data"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/dot.md"},{"flag":"default","featured":true,"revisions":[{"name":"enketo","release":"2023-09-12","title":"Enketo","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/enketo.md","body":"

JavaScript library for rendering xforms as HTML with CSS and JS.

\n"}],"name":"enketo","title":"Enketo","ring":"adopt","quadrant":"languages-and-frameworks","body":"

JavaScript library for rendering xforms as HTML with CSS and JS.

\n","info":"","angleFraction":0.3504504238687933,"radiusFraction":0.3720489836992038,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/enketo.md"},{"flag":"default","featured":true,"revisions":[{"name":"git","release":"2023-09-12","title":"git","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/git.md","body":"

Primary content version system.

\n"}],"name":"git","title":"git","ring":"adopt","quadrant":"tools","body":"

Primary content version system.

\n","info":"","angleFraction":0.8899912710184079,"radiusFraction":0.6902144012735199,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/git.md"},{"flag":"default","featured":true,"revisions":[{"name":"github-actions","release":"2023-09-12","title":"GitHub Actions","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/github-actions.md","body":"

Used extensively for CI across CHT products including testing and releasing.

\n"}],"name":"github-actions","title":"GitHub Actions","ring":"adopt","quadrant":"tools","body":"

Used extensively for CI across CHT products including testing and releasing.

\n","info":"","angleFraction":0.1978866317350063,"radiusFraction":0.7454819962422308,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/github-actions.md"},{"flag":"changed","featured":true,"revisions":[{"name":"grafana","release":"2023-09-13","title":"Grafana","ring":"adopt","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/grafana.md","body":"

Being evaluated for CHT Watchdog.

\n"},{"name":"grafana","release":"2023-09-12","title":"Grafana","ring":"assess","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grafana.md","body":"

Being evaluated for CHT Watchdog.

\n"}],"name":"grafana","title":"Grafana","ring":"adopt","quadrant":"tools","body":"

Being evaluated for CHT Watchdog.

\n","info":"","angleFraction":0.5607259291948641,"radiusFraction":0.4741072990060813,"release":"2023-09-13","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/grafana.md"},{"flag":"default","featured":false,"revisions":[{"name":"grunt","release":"2023-09-12","title":"Grunt","ring":"stop","quadrant":"tools","tags":["tool"],"featured":false,"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grunt.md","body":"

Deprecated: use native JavaScript instead.

\n"}],"name":"grunt","title":"Grunt","ring":"stop","quadrant":"tools","body":"

Deprecated: use native JavaScript instead.

\n","info":"","angleFraction":0.5779943937153516,"radiusFraction":0.5002710124133498,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/grunt.md"},{"flag":"default","featured":true,"revisions":[{"name":"haproxy","release":"2023-09-12","title":"HAProxy","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/haproxy.md","body":"

Used for audit logging and load balancing CouchDB cluster. Due for re-evaluation.

\n"}],"name":"haproxy","title":"HAProxy","ring":"assess","quadrant":"tools","body":"

Used for audit logging and load balancing CouchDB cluster. Due for re-evaluation.

\n","info":"","angleFraction":0.2422027801653397,"radiusFraction":0.3962018319833065,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/haproxy.md"},{"flag":"default","featured":true,"revisions":[{"name":"javascript","release":"2023-09-12","title":"JavaScript","ring":"adopt","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/javascript.md","body":"

Primary programming language used everywhere in the CHT.

\n"}],"name":"javascript","title":"JavaScript","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Primary programming language used everywhere in the CHT.

\n","info":"","angleFraction":0.36592030839644196,"radiusFraction":0.23965418599330057,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/javascript.md"},{"flag":"changed","featured":true,"revisions":[{"name":"k3d","release":"2023-09-13","title":"k3d","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/k3d.md","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n"},{"name":"k3d","release":"2023-09-12","title":"k3d","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/k3d.md","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n"}],"name":"k3d","title":"k3d","ring":"adopt","quadrant":"tools","body":"

An orchestration tool which may be suitable for self-hosting. Under investigation.

\n","info":"","angleFraction":0.32407894079352717,"radiusFraction":0.7159907635726774,"release":"2023-09-13","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/k3d.md"},{"flag":"default","featured":true,"revisions":[{"name":"klipfolio","release":"2023-09-12","title":"Klipfolio","ring":"adopt","quadrant":"tools","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/klipfolio.md","body":"

Klipfolio is a paid third-party SAAS option for building dashboards.

\n

From Wikipedia article:\nKlipfolio offers an online dashboard platform for building real-time business dashboards. It allows business users to connect to many data services, automate data retrieval, and then manipulate, and visualize the data. Klipfolio uses a schema-less architecture that allows non-technical end users to more easily connect to data sources, and separates data from presentation to more efficiently use and reuse data sources throughout the platform.

\n

Klipfolio has built-in formula editing, allowing end-users to transform, combine, slice, and filter any data before visualizing it. Users are able to access the dashboard from their desktop, tablet, TV, and mobile phone, and share it with colleagues by granting access to the dashboard, or by scheduling email reports.

\n"}],"name":"klipfolio","title":"Klipfolio","ring":"adopt","quadrant":"tools","body":"

Klipfolio is a paid third-party SAAS option for building dashboards.

\n

From Wikipedia article:\nKlipfolio offers an online dashboard platform for building real-time business dashboards. It allows business users to connect to many data services, automate data retrieval, and then manipulate, and visualize the data. Klipfolio uses a schema-less architecture that allows non-technical end users to more easily connect to data sources, and separates data from presentation to more efficiently use and reuse data sources throughout the platform.

\n

Klipfolio has built-in formula editing, allowing end-users to transform, combine, slice, and filter any data before visualizing it. Users are able to access the dashboard from their desktop, tablet, TV, and mobile phone, and share it with colleagues by granting access to the dashboard, or by scheduling email reports.

\n","info":"","angleFraction":0.07729315313364382,"radiusFraction":0.4043073370170134,"release":"2023-09-12","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/klipfolio.md"},{"flag":"changed","featured":true,"revisions":[{"name":"kubernetes","release":"2023-09-13","title":"Kubernetes","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/kubernetes.md","body":"

Only needed for Medic hosting right now.

\n"},{"name":"kubernetes","release":"2023-09-12","title":"Kubernetes","ring":"assess","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/kubernetes.md","body":"

Only needed for Medic hosting right now.

\n"}],"name":"kubernetes","title":"Kubernetes","ring":"adopt","quadrant":"tools","body":"

Only needed for Medic hosting right now.

\n","info":"","angleFraction":0.948493424151091,"radiusFraction":0.4415120949679321,"release":"2023-09-13","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/kubernetes.md"},{"flag":"default","featured":true,"revisions":[{"name":"lua","release":"2023-09-12","title":"lua","ring":"assess","quadrant":"languages-and-frameworks","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/lua.md","body":"

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

\n

lua website

\n"}],"name":"lua","title":"lua","ring":"assess","quadrant":"languages-and-frameworks","body":"

Used in haproxy to mask credentials from being logged in the audit log. Because haproxy is being assessed, this may be removed soon.

\n

lua website

\n","info":"","angleFraction":0.9631298134799369,"radiusFraction":0.26852104217104045,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/lua.md"},{"flag":"default","featured":true,"revisions":[{"name":"nginx","release":"2023-09-12","title":"Nginx","ring":"adopt","quadrant":"tools","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nginx.md","body":"

Provides SSL termination for self-hosted CHT deployments.

\n"}],"name":"nginx","title":"Nginx","ring":"adopt","quadrant":"tools","body":"

Provides SSL termination for self-hosted CHT deployments.

\n","info":"","angleFraction":0.9059544009480673,"radiusFraction":0.6598064954017577,"release":"2023-09-12","tags":["infrastructure"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nginx.md"},{"flag":"default","featured":true,"revisions":[{"name":"nodejs","release":"2023-09-12","title":"node.js","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nodejs.md","body":"

Used for services on the server like API and Sentinel as well as scripting.

\n"}],"name":"nodejs","title":"node.js","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Used for services on the server like API and Sentinel as well as scripting.

\n","info":"","angleFraction":0.19510298919311642,"radiusFraction":0.18677469659345292,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/nodejs.md"},{"flag":"default","featured":true,"revisions":[{"name":"npm","release":"2023-09-12","title":"npm","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/npm.md","body":"

JavaScript package repository used widely for CHT products.

\n"}],"name":"npm","title":"npm","ring":"adopt","quadrant":"tools","body":"

JavaScript package repository used widely for CHT products.

\n","info":"","angleFraction":0.03228260128810678,"radiusFraction":0.1423590201346523,"release":"2023-09-12","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/npm.md"},{"flag":"default","featured":true,"revisions":[{"name":"postgres","release":"2023-09-12","title":"Postgres","ring":"adopt","quadrant":"tools","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/postgres.md","body":"

Primarily used as a data warehouse for analytics queries.

\n"}],"name":"postgres","title":"Postgres","ring":"adopt","quadrant":"tools","body":"

Primarily used as a data warehouse for analytics queries.

\n","info":"","angleFraction":0.026601334563156387,"radiusFraction":0.8094739827925168,"release":"2023-09-12","tags":["database"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/postgres.md"},{"flag":"default","featured":true,"revisions":[{"name":"pouchdb","release":"2023-09-12","title":"PouchDB","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pouchdb.md","body":"

JavaScript library for storing data on the phone in the CHT webapp. \nAlso used as a library for querying CouchDB from api, sentinel, and the admin app.

\n"}],"name":"pouchdb","title":"PouchDB","ring":"adopt","quadrant":"languages-and-frameworks","body":"

JavaScript library for storing data on the phone in the CHT webapp. \nAlso used as a library for querying CouchDB from api, sentinel, and the admin app.

\n","info":"","angleFraction":0.021643853042184302,"radiusFraction":0.0744297326280805,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pouchdb.md"},{"flag":"changed","featured":true,"revisions":[{"name":"prometheus","release":"2023-09-13","title":"Prometheus","ring":"adopt","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/prometheus.md","body":"

Being evaluated for CHT Watchdog.

\n"},{"name":"prometheus","release":"2023-09-12","title":"Prometheus","ring":"assess","quadrant":"tools","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/prometheus.md","body":"

Being evaluated for CHT Watchdog.

\n"}],"name":"prometheus","title":"Prometheus","ring":"adopt","quadrant":"tools","body":"

Being evaluated for CHT Watchdog.

\n","info":"","angleFraction":0.19867707991792205,"radiusFraction":0.5907224076378728,"release":"2023-09-13","tags":["monitoring","alerting"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/prometheus.md"},{"flag":"default","featured":true,"revisions":[{"name":"protractor","release":"2023-09-12","title":"Protractor","ring":"stop","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/protractor.md","body":"

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

\n"}],"name":"protractor","title":"Protractor","ring":"stop","quadrant":"languages-and-frameworks","body":"

Obsolete UI testing framework. Deprecated: rewrite to WebDriverIO.

\n","info":"","angleFraction":0.8765518988965615,"radiusFraction":0.6037419949767557,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/protractor.md"},{"flag":"default","featured":true,"revisions":[{"name":"pwa","release":"2023-09-12","title":"PWA","ring":"adopt","quadrant":"methods-and-patterns","tags":["technique"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pwa.md","body":"

Followed for CHT webapp to allow offline first capability.

\n"}],"name":"pwa","title":"PWA","ring":"adopt","quadrant":"methods-and-patterns","body":"

Followed for CHT webapp to allow offline first capability.

\n","info":"","angleFraction":0.228660255849082,"radiusFraction":0.9398105519659619,"release":"2023-09-12","tags":["technique"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/pwa.md"},{"flag":"default","featured":true,"revisions":[{"name":"python","release":"2023-09-12","title":"Python","ring":"stop","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/python.md","body":"

Used to convert xls forms to xforms in cht-conf.

\n"}],"name":"python","title":"Python","ring":"stop","quadrant":"languages-and-frameworks","body":"

Used to convert xls forms to xforms in cht-conf.

\n","info":"","angleFraction":0.42357917430101355,"radiusFraction":0.1642545121505412,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/python.md"},{"flag":"default","featured":true,"revisions":[{"name":"quality-assistance","release":"2023-09-12","title":"Quality Assistance","ring":"adopt","quadrant":"methods-and-patterns","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/quality-assistance.md","body":"

Documentation

\n"}],"name":"quality-assistance","title":"Quality Assistance","ring":"adopt","quadrant":"methods-and-patterns","body":"

Documentation

\n","info":"","angleFraction":0.8675200027438341,"radiusFraction":0.07119536405809379,"release":"2023-09-12","tags":["product-development"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/quality-assistance.md"},{"flag":"new","featured":true,"revisions":[{"name":"sonar","release":"2023-09-13","title":"Sonar","ring":"adopt","quadrant":"tools","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/sonar.md","body":"

Sonar static analysis supports development by providing feedback on code quality and security issues. Sonar analysis must pass on all new code.

\n

SonarCloud can be enabled on any public repo in the Medic organization.

\n

Documentation

\n"}],"name":"sonar","title":"Sonar","ring":"adopt","quadrant":"tools","body":"

Sonar static analysis supports development by providing feedback on code quality and security issues. Sonar analysis must pass on all new code.

\n

SonarCloud can be enabled on any public repo in the Medic organization.

\n

Documentation

\n","info":"","angleFraction":0.6801521820255851,"radiusFraction":0.9138411178031343,"release":"2023-09-13","tags":["tool"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-13/sonar.md"},{"flag":"default","featured":true,"revisions":[{"name":"superset","release":"2023-09-12","title":"Superset","ring":"adopt","quadrant":"tools","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/superset.md","body":"

Open source product for configurable dashboards, used for health care analytics.

\n"}],"name":"superset","title":"Superset","ring":"adopt","quadrant":"tools","body":"

Open source product for configurable dashboards, used for health care analytics.

\n","info":"","angleFraction":0.9942407843971071,"radiusFraction":0.8857768841507727,"release":"2023-09-12","tags":["dashboard","analytics"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/superset.md"},{"flag":"default","featured":true,"revisions":[{"name":"typescript","release":"2023-09-12","title":"TypeScript","ring":"adopt","quadrant":"languages-and-frameworks","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/typescript.md","body":"

Used a lot in CHT webapp with the potential to use it more widely.

\n"}],"name":"typescript","title":"TypeScript","ring":"adopt","quadrant":"languages-and-frameworks","body":"

Used a lot in CHT webapp with the potential to use it more widely.

\n","info":"","angleFraction":0.16133239354857687,"radiusFraction":0.23768305375412746,"release":"2023-09-12","tags":["language"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/typescript.md"},{"flag":"default","featured":true,"revisions":[{"name":"webdriverio","release":"2023-09-12","title":"WebDriverIO","ring":"adopt","quadrant":"languages-and-frameworks","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/webdriverio.md","body":"

UI testing framework used for end-to-end testing in web applications.

\n"}],"name":"webdriverio","title":"WebDriverIO","ring":"adopt","quadrant":"languages-and-frameworks","body":"

UI testing framework used for end-to-end testing in web applications.

\n","info":"","angleFraction":0.0376918447218022,"radiusFraction":0.6824516783451198,"release":"2023-09-12","tags":["framework"],"fileName":"/Users/andra/Documents/GitHub/cht-tech-radar/radar/2023-09-12/webdriverio.md"}],"releases":["2023-09-12","2023-09-13"]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 55a064c..67be558 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,192 +2,192 @@ /cht-tech-radar-contributors/index.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/platforms-and-aoe-services/android-dev.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/angular.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/angularjs.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/platforms-and-aoe-services/aws.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/bash.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/methods-and-patterns/continuous-discovery.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/couch2pg.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/couchdb.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/css.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/dbt.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/docker.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/dot.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/enketo.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/git.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/github-actions.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/grafana.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/grunt.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/haproxy.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/javascript.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/k3d.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/klipfolio.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/kubernetes.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/lua.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/nginx.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/nodejs.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/npm.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/postgres.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/pouchdb.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/prometheus.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/protractor.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/methods-and-patterns/pwa.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/python.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/methods-and-patterns/quality-assistance.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/sonar.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/tools/superset.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/typescript.html - 2023-09-26 + 2023-09-29 weekly /cht-tech-radar-contributors/languages-and-frameworks/webdriverio.html - 2023-09-26 + 2023-09-29 weekly \ No newline at end of file diff --git a/static/js/main.07772151.js b/static/js/main.07772151.js new file mode 100644 index 0000000..903b7d6 --- /dev/null +++ b/static/js/main.07772151.js @@ -0,0 +1,2 @@ +/*! For license information please see main.07772151.js.LICENSE.txt */ +!function(){var e={5230:function(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw a}}}},e.exports.__esModule=!0,e.exports.default=e.exports},1001:function(e,t,n){var r=n(3336),i=n(1903),o=n(4097);e.exports=function(e){var t=i();return function(){var n,i=r(e);if(t){var a=r(this).constructor;n=Reflect.construct(i,arguments,a)}else n=i.apply(this,arguments);return o(this,n)}},e.exports.__esModule=!0,e.exports.default=e.exports},3674:function(e){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports.default=e.exports},9282:function(e,t,n){var r=n(834);function i(){return"undefined"!==typeof Reflect&&Reflect.get?(e.exports=i=Reflect.get,e.exports.__esModule=!0,e.exports.default=e.exports):(e.exports=i=function(e,t,n){var i=r(e,t);if(i){var o=Object.getOwnPropertyDescriptor(i,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},e.exports.__esModule=!0,e.exports.default=e.exports),i.apply(this,arguments)}e.exports=i,e.exports.__esModule=!0,e.exports.default=e.exports},3336:function(e){function t(n){return e.exports=t=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.__esModule=!0,e.exports.default=e.exports,t(n)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},6406:function(e,t,n){var r=n(9480);e.exports=function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&r(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports},4213:function(e){e.exports=function(e){return-1!==Function.toString.call(e).indexOf("[native code]")},e.exports.__esModule=!0,e.exports.default=e.exports},1903:function(e){e.exports=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}},e.exports.__esModule=!0,e.exports.default=e.exports},1238:function(e){e.exports=function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.__esModule=!0,e.exports.default=e.exports},5958:function(e){e.exports=function(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(l){s=!0,i=l}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}},e.exports.__esModule=!0,e.exports.default=e.exports},8092:function(e){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports},8819:function(e){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports},3137:function(e,t,n){var r=n(3674);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}e.exports=function(e){for(var t=1;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o},e.exports.__esModule=!0,e.exports.default=e.exports},6421:function(e){e.exports=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i},e.exports.__esModule=!0,e.exports.default=e.exports},4097:function(e,t,n){var r=n(829).default,i=n(5825);e.exports=function(e,t){if(t&&("object"===r(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return i(e)},e.exports.__esModule=!0,e.exports.default=e.exports},1170:function(e,t,n){var r=n(829).default;function i(){"use strict";e.exports=i=function(){return t},e.exports.__esModule=!0,e.exports.default=e.exports;var t={},n=Object.prototype,o=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},s=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(N){c=function(e,t,n){return e[t]=n}}function f(e,t,n,r){var i=t&&t.prototype instanceof p?t:p,o=Object.create(i.prototype),a=new O(r||[]);return o._invoke=function(e,t,n){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return T()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=k(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=d(e,t,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(N){return{type:"throw",arg:N}}}t.wrap=f;var h={};function p(){}function m(){}function v(){}var g={};c(g,s,(function(){return this}));var y=Object.getPrototypeOf,b=y&&y(y(C([])));b&&b!==n&&o.call(b,s)&&(g=b);var w=v.prototype=p.prototype=Object.create(g);function x(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(i,a,s,l){var u=d(e[i],e,a);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==r(f)&&o.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,s,l)}),(function(e){n("throw",e,s,l)})):t.resolve(f).then((function(e){c.value=e,s(c)}),(function(e){return n("throw",e,s,l)}))}l(u.arg)}var i;this._invoke=function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}}function k(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,k(e,t),"throw"===t.method))return h;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var r=d(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,h;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,h):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,h)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function C(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var i=this.tryEntries[r],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=o.call(i,"catchLoc"),l=o.call(i,"finallyLoc");if(s&&l){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;E(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),h}},t}e.exports=i,e.exports.__esModule=!0,e.exports.default=e.exports},9480:function(e){function t(n,r){return e.exports=t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},e.exports.__esModule=!0,e.exports.default=e.exports,t(n,r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},8120:function(e,t,n){var r=n(4042),i=n(5958),o=n(665),a=n(8092);e.exports=function(e,t){return r(e)||i(e,t)||o(e,t)||a()},e.exports.__esModule=!0,e.exports.default=e.exports},834:function(e,t,n){var r=n(3336);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=r(e)););return e},e.exports.__esModule=!0,e.exports.default=e.exports},4183:function(e,t,n){var r=n(7359),i=n(1238),o=n(665),a=n(8819);e.exports=function(e){return r(e)||i(e)||o(e)||a()},e.exports.__esModule=!0,e.exports.default=e.exports},829:function(e){function t(n){return e.exports=t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(n)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},665:function(e,t,n){var r=n(5230);e.exports=function(e,t){if(e){if("string"===typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports},4060:function(e,t,n){var r=n(3336),i=n(9480),o=n(4213),a=n(7754);function s(t){var n="function"===typeof Map?new Map:void 0;return e.exports=s=function(e){if(null===e||!o(e))return e;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return a(e,arguments,r(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),i(t,e)},e.exports.__esModule=!0,e.exports.default=e.exports,s(t)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},2317:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function i(){for(var e=[],t=0;t>>0;for(t=0;t0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var R=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,I=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,F={},U={};function q(e,t,n,r){var i=r;"string"===typeof r&&(i=function(){return this[r]()}),e&&(U[e]=i),t&&(U[t[0]]=function(){return D(i.apply(this,arguments),t[1],t[2])}),n&&(U[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function z(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function B(e){var t,n,r=e.match(R);for(t=0,n=r.length;t=0&&I.test(e);)e=e.replace(I,r),I.lastIndex=0,n-=1;return e}var Y={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function W(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(R).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var G="Invalid date";function $(){return this._invalidDate}var Q="%d",X=/\d{1,2}/;function Z(e){return this._ordinal.replace("%d",e)}var K={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function J(e,t,n,r){var i=this._relativeTime[n];return N(i)?i(e,t,n,r):i.replace(/%d/i,e)}function ee(e,t){var n=this._relativeTime[e>0?"future":"past"];return N(n)?n(t):n.replace(/%s/i,t)}var te={};function ne(e,t){var n=e.toLowerCase();te[n]=te[n+"s"]=te[t]=e}function re(e){return"string"===typeof e?te[e]||te[e.toLowerCase()]:void 0}function ie(e){var t,n,r={};for(n in e)s(e,n)&&(t=re(n))&&(r[t]=e[n]);return r}var oe={};function ae(e,t){oe[e]=t}function se(e){var t,n=[];for(t in e)s(e,t)&&n.push({unit:t,priority:oe[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function le(e){return e%4===0&&e%100!==0||e%400===0}function ue(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function ce(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=ue(t)),n}function fe(e,t){return function(n){return null!=n?(he(this,e,n),r.updateOffset(this,t),this):de(this,e)}}function de(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function he(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&le(e.year())&&1===e.month()&&29===e.date()?(n=ce(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Je(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function pe(e){return N(this[e=re(e)])?this[e]():this}function me(e,t){if("object"===typeof e){var n,r=se(e=ie(e)),i=r.length;for(n=0;n68?1900:2e3)};var vt=fe("FullYear",!0);function gt(){return le(this.year())}function yt(e,t,n,r,i,o,a){var s;return e<100&&e>=0?(s=new Date(e+400,t,n,r,i,o,a),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,n,r,i,o,a),s}function bt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function wt(e,t,n){var r=7+t-n;return-(7+bt(e,0,r).getUTCDay()-t)%7+r-1}function xt(e,t,n,r,i){var o,a,s=1+7*(t-1)+(7+n-r)%7+wt(e,r,i);return s<=0?a=mt(o=e-1)+s:s>mt(e)?(o=e+1,a=s-mt(e)):(o=e,a=s),{year:o,dayOfYear:a}}function _t(e,t,n){var r,i,o=wt(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return a<1?r=a+kt(i=e.year()-1,t,n):a>kt(e.year(),t,n)?(r=a-kt(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function kt(e,t,n){var r=wt(e,t,n),i=wt(e+1,t,n);return(mt(e)-r+i)/7}function St(e){return _t(e,this._week.dow,this._week.doy).week}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),ne("week","w"),ne("isoWeek","W"),ae("week",5),ae("isoWeek",5),Le("w",_e),Le("ww",_e,ye),Le("W",_e),Le("WW",_e,ye),qe(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=ce(e)}));var Et={dow:0,doy:6};function Ot(){return this._week.dow}function Ct(){return this._week.doy}function Tt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Nt(e){var t=_t(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Mt(e,t){return"string"!==typeof e?e:isNaN(e)?"number"===typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function At(e,t){return"string"===typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function jt(e,t){return e.slice(t,7).concat(e.slice(0,t))}q("d",0,"do","day"),q("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),q("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),q("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),ne("day","d"),ne("weekday","e"),ne("isoWeekday","E"),ae("day",11),ae("weekday",11),ae("isoWeekday",11),Le("d",_e),Le("e",_e),Le("E",_e),Le("dd",(function(e,t){return t.weekdaysMinRegex(e)})),Le("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),Le("dddd",(function(e,t){return t.weekdaysRegex(e)})),qe(["dd","ddd","dddd"],(function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:v(n).invalidWeekday=e})),qe(["d","e","E"],(function(e,t,n,r){t[r]=ce(e)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Lt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Dt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Rt=Pe,It=Pe,Ft=Pe;function Ut(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?jt(n,this._week.dow):e?n[e.day()]:n}function qt(e){return!0===e?jt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function zt(e){return!0===e?jt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Bt(e,t,n){var r,i,o,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)o=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Be.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Be.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Be.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Be.call(this._weekdaysParse,a))||-1!==(i=Be.call(this._shortWeekdaysParse,a))||-1!==(i=Be.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Be.call(this._shortWeekdaysParse,a))||-1!==(i=Be.call(this._weekdaysParse,a))||-1!==(i=Be.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Be.call(this._minWeekdaysParse,a))||-1!==(i=Be.call(this._weekdaysParse,a))||-1!==(i=Be.call(this._shortWeekdaysParse,a))?i:null}function Ht(e,t,n){var r,i,o;if(this._weekdaysParseExact)return Bt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Vt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Mt(e,this.localeData()),this.add(e-t,"d")):t}function Yt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Wt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=At(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Gt(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Xt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=Rt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function $t(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Xt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=It),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qt(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Xt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ft),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Xt(){function e(e,t){return t.length-e.length}var t,n,r,i,o,a=[],s=[],l=[],u=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=Ie(this.weekdaysMin(n,"")),i=Ie(this.weekdaysShort(n,"")),o=Ie(this.weekdays(n,"")),a.push(r),s.push(i),l.push(o),u.push(r),u.push(i),u.push(o);a.sort(e),s.sort(e),l.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Zt(){return this.hours()%12||12}function Kt(){return this.hours()||24}function Jt(e,t){q(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function en(e,t){return t._meridiemParse}function tn(e){return"p"===(e+"").toLowerCase().charAt(0)}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Zt),q("k",["kk",2],0,Kt),q("hmm",0,0,(function(){return""+Zt.apply(this)+D(this.minutes(),2)})),q("hmmss",0,0,(function(){return""+Zt.apply(this)+D(this.minutes(),2)+D(this.seconds(),2)})),q("Hmm",0,0,(function(){return""+this.hours()+D(this.minutes(),2)})),q("Hmmss",0,0,(function(){return""+this.hours()+D(this.minutes(),2)+D(this.seconds(),2)})),Jt("a",!0),Jt("A",!1),ne("hour","h"),ae("hour",13),Le("a",en),Le("A",en),Le("H",_e),Le("h",_e),Le("k",_e),Le("HH",_e,ye),Le("hh",_e,ye),Le("kk",_e,ye),Le("hmm",ke),Le("hmmss",Se),Le("Hmm",ke),Le("Hmmss",Se),Ue(["H","HH"],We),Ue(["k","kk"],(function(e,t,n){var r=ce(e);t[We]=24===r?0:r})),Ue(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Ue(["h","hh"],(function(e,t,n){t[We]=ce(e),v(n).bigHour=!0})),Ue("hmm",(function(e,t,n){var r=e.length-2;t[We]=ce(e.substr(0,r)),t[Ge]=ce(e.substr(r)),v(n).bigHour=!0})),Ue("hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[We]=ce(e.substr(0,r)),t[Ge]=ce(e.substr(r,2)),t[$e]=ce(e.substr(i)),v(n).bigHour=!0})),Ue("Hmm",(function(e,t,n){var r=e.length-2;t[We]=ce(e.substr(0,r)),t[Ge]=ce(e.substr(r))})),Ue("Hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[We]=ce(e.substr(0,r)),t[Ge]=ce(e.substr(r,2)),t[$e]=ce(e.substr(i))}));var nn=/[ap]\.?m?\.?/i,rn=fe("Hours",!0);function on(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var an,sn={calendar:P,longDateFormat:Y,invalidDate:G,ordinal:Q,dayOfMonthOrdinalParse:X,relativeTime:K,months:et,monthsShort:tt,week:Et,weekdays:Pt,weekdaysMin:Dt,weekdaysShort:Lt,meridiemParse:nn},ln={},un={};function cn(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(r=pn(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&cn(i,n)>=t-1)break;t--}o++}return an}function hn(e){return null!=e.match("^[^/\\\\]*$")}function pn(t){var n=null;if(void 0===ln[t]&&e&&e.exports&&hn(t))try{n=an._abbr,Object(function(){var e=new Error("Cannot find module 'undefined'");throw e.code="MODULE_NOT_FOUND",e}()),mn(n)}catch(r){ln[t]=null}return ln[t]}function mn(e,t){var n;return e&&((n=u(t)?yn(e):vn(e,t))?an=n:"undefined"!==typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),an._abbr}function vn(e,t){if(null!==t){var n,r=sn;if(t.abbr=e,null!=ln[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=ln[e]._config;else if(null!=t.parentLocale)if(null!=ln[t.parentLocale])r=ln[t.parentLocale]._config;else{if(null==(n=pn(t.parentLocale)))return un[t.parentLocale]||(un[t.parentLocale]=[]),un[t.parentLocale].push({name:e,config:t}),null;r=n._config}return ln[e]=new j(A(r,t)),un[e]&&un[e].forEach((function(e){vn(e.name,e.config)})),mn(e),ln[e]}return delete ln[e],null}function gn(e,t){if(null!=t){var n,r,i=sn;null!=ln[e]&&null!=ln[e].parentLocale?ln[e].set(A(ln[e]._config,t)):(null!=(r=pn(e))&&(i=r._config),t=A(i,t),null==r&&(t.abbr=e),(n=new j(t)).parentLocale=ln[e],ln[e]=n),mn(e)}else null!=ln[e]&&(null!=ln[e].parentLocale?(ln[e]=ln[e].parentLocale,e===mn()&&mn(e)):null!=ln[e]&&delete ln[e]);return ln[e]}function yn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return an;if(!o(e)){if(t=pn(e))return t;e=[e]}return dn(e)}function bn(){return O(ln)}function wn(e){var t,n=e._a;return n&&-2===v(e).overflow&&(t=n[Ve]<0||n[Ve]>11?Ve:n[Ye]<1||n[Ye]>Je(n[He],n[Ve])?Ye:n[We]<0||n[We]>24||24===n[We]&&(0!==n[Ge]||0!==n[$e]||0!==n[Qe])?We:n[Ge]<0||n[Ge]>59?Ge:n[$e]<0||n[$e]>59?$e:n[Qe]<0||n[Qe]>999?Qe:-1,v(e)._overflowDayOfYear&&(tYe)&&(t=Ye),v(e)._overflowWeeks&&-1===t&&(t=Xe),v(e)._overflowWeekday&&-1===t&&(t=Ze),v(e).overflow=t),e}var xn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,kn=/Z|[+-]\d\d(?::?\d\d)?/,Sn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],En=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],On=/^\/?Date\((-?\d+)/i,Cn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Nn(e){var t,n,r,i,o,a,s=e._i,l=xn.exec(s)||_n.exec(s),u=Sn.length,c=En.length;if(l){for(v(e).iso=!0,t=0,n=u;tmt(o)||0===e._dayOfYear)&&(v(e)._overflowDayOfYear=!0),n=bt(o,0,e._dayOfYear),e._a[Ve]=n.getUTCMonth(),e._a[Ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[We]&&0===e._a[Ge]&&0===e._a[$e]&&0===e._a[Qe]&&(e._nextDay=!0,e._a[We]=0),e._d=(e._useUTC?bt:yt).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[We]=24),e._w&&"undefined"!==typeof e._w.d&&e._w.d!==i&&(v(e).weekdayMismatch=!0)}}function qn(e){var t,n,r,i,o,a,s,l,u;null!=(t=e._w).GG||null!=t.W||null!=t.E?(o=1,a=4,n=In(t.GG,e._a[He],_t(Qn(),1,4).year),r=In(t.W,1),((i=In(t.E,1))<1||i>7)&&(l=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,u=_t(Qn(),o,a),n=In(t.gg,e._a[He],u.year),r=In(t.w,u.week),null!=t.d?((i=t.d)<0||i>6)&&(l=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(l=!0)):i=o),r<1||r>kt(n,o,a)?v(e)._overflowWeeks=!0:null!=l?v(e)._overflowWeekday=!0:(s=xt(n,r,i,o,a),e._a[He]=s.year,e._dayOfYear=s.dayOfYear)}function zn(e){if(e._f!==r.ISO_8601)if(e._f!==r.RFC_2822){e._a=[],v(e).empty=!0;var t,n,i,o,a,s,l,u=""+e._i,c=u.length,f=0;for(l=(i=V(e._f,e._locale).match(R)||[]).length,t=0;t0&&v(e).unusedInput.push(a),u=u.slice(u.indexOf(n)+n.length),f+=n.length),U[o]?(n?v(e).empty=!1:v(e).unusedTokens.push(o),ze(o,n,e)):e._strict&&!n&&v(e).unusedTokens.push(o);v(e).charsLeftOver=c-f,u.length>0&&v(e).unusedInput.push(u),e._a[We]<=12&&!0===v(e).bigHour&&e._a[We]>0&&(v(e).bigHour=void 0),v(e).parsedDateParts=e._a.slice(0),v(e).meridiem=e._meridiem,e._a[We]=Bn(e._locale,e._a[We],e._meridiem),null!==(s=v(e).era)&&(e._a[He]=e._locale.erasConvertYear(s,e._a[He])),Un(e),wn(e)}else Dn(e);else Nn(e)}function Bn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function Hn(e){var t,n,r,i,o,a,s=!1,l=e._f.length;if(0===l)return v(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:y()}));function Kn(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Qn();for(n=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _r(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return x(t,this),(t=Wn(t))._a?(e=t._isUTC?p(t._a):Qn(t._a),this._isDSTShifted=this.isValid()&&ur(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function kr(){return!!this.isValid()&&!this._isUTC}function Sr(){return!!this.isValid()&&this._isUTC}function Er(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var Or=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Cr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Tr(e,t){var n,r,i,o=e,a=null;return sr(e)?o={ms:e._milliseconds,d:e._days,M:e._months}:c(e)||!isNaN(+e)?(o={},t?o[t]=+e:o.milliseconds=+e):(a=Or.exec(e))?(n="-"===a[1]?-1:1,o={y:0,d:ce(a[Ye])*n,h:ce(a[We])*n,m:ce(a[Ge])*n,s:ce(a[$e])*n,ms:ce(lr(1e3*a[Qe]))*n}):(a=Cr.exec(e))?(n="-"===a[1]?-1:1,o={y:Nr(a[2],n),M:Nr(a[3],n),w:Nr(a[4],n),d:Nr(a[5],n),h:Nr(a[6],n),m:Nr(a[7],n),s:Nr(a[8],n)}):null==o?o={}:"object"===typeof o&&("from"in o||"to"in o)&&(i=Ar(Qn(o.from),Qn(o.to)),(o={}).ms=i.milliseconds,o.M=i.months),r=new ar(o),sr(e)&&s(e,"_locale")&&(r._locale=e._locale),sr(e)&&s(e,"_isValid")&&(r._isValid=e._isValid),r}function Nr(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Mr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Ar(e,t){var n;return e.isValid()&&t.isValid()?(t=hr(t,e),e.isBefore(t)?n=Mr(e,t):((n=Mr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function jr(e,t){return function(n,r){var i;return null===r||isNaN(+r)||(T(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),Pr(this,Tr(n,r),e),this}}function Pr(e,t,n,i){var o=t._milliseconds,a=lr(t._days),s=lr(t._months);e.isValid()&&(i=null==i||i,s&&ut(e,de(e,"Month")+s*n),a&&he(e,"Date",de(e,"Date")+a*n),o&&e._d.setTime(e._d.valueOf()+o*n),i&&r.updateOffset(e,a||s))}Tr.fn=ar.prototype,Tr.invalid=or;var Lr=jr(1,"add"),Dr=jr(-1,"subtract");function Rr(e){return"string"===typeof e||e instanceof String}function Ir(e){return k(e)||f(e)||Rr(e)||c(e)||Ur(e)||Fr(e)||null===e||void 0===e}function Fr(e){var t,n,r=a(e)&&!l(e),i=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],u=o.length;for(t=0;tn.valueOf():n.valueOf()9999?H(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):N(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(n,"Z")):H(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ei(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r,i="moment",o="";return this.isLocal()||(i=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),e="["+i+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=o+'[")]',this.format(e+t+n+r)}function ti(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=H(this,e);return this.localeData().postformat(t)}function ni(e,t){return this.isValid()&&(k(e)&&e.isValid()||Qn(e).isValid())?Tr({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ri(e){return this.from(Qn(),e)}function ii(e,t){return this.isValid()&&(k(e)&&e.isValid()||Qn(e).isValid())?Tr({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function oi(e){return this.to(Qn(),e)}function ai(e){var t;return void 0===e?this._locale._abbr:(null!=(t=yn(e))&&(this._locale=t),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var si=E("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function li(){return this._locale}var ui=1e3,ci=60*ui,fi=60*ci,di=3506328*fi;function hi(e,t){return(e%t+t)%t}function pi(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-di:new Date(e,t,n).valueOf()}function mi(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-di:Date.UTC(e,t,n)}function vi(e){var t,n;if(void 0===(e=re(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?mi:pi,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=hi(t+(this._isUTC?0:this.utcOffset()*ci),fi);break;case"minute":t=this._d.valueOf(),t-=hi(t,ci);break;case"second":t=this._d.valueOf(),t-=hi(t,ui)}return this._d.setTime(t),r.updateOffset(this,!0),this}function gi(e){var t,n;if(void 0===(e=re(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?mi:pi,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=fi-hi(t+(this._isUTC?0:this.utcOffset()*ci),fi)-1;break;case"minute":t=this._d.valueOf(),t+=ci-hi(t,ci)-1;break;case"second":t=this._d.valueOf(),t+=ui-hi(t,ui)-1}return this._d.setTime(t),r.updateOffset(this,!0),this}function yi(){return this._d.valueOf()-6e4*(this._offset||0)}function bi(){return Math.floor(this.valueOf()/1e3)}function wi(){return new Date(this.valueOf())}function xi(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function _i(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function ki(){return this.isValid()?this.toISOString():null}function Si(){return g(this)}function Ei(){return h({},v(this))}function Oi(){return v(this).overflow}function Ci(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ti(e,t){var n,i,o,a=this._eras||yn("en")._eras;for(n=0,i=a.length;n=0)return l[r]}function Mi(e,t){var n=e.since<=e.until?1:-1;return void 0===t?r(e.since).year():r(e.since).year()+(t-e.offset)*n}function Ai(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e(o=kt(e,r,i))&&(t=o),Zi.call(this,e,t,n,r,i))}function Zi(e,t,n,r,i){var o=xt(e,t,n,r,i),a=bt(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function Ki(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}q("N",0,0,"eraAbbr"),q("NN",0,0,"eraAbbr"),q("NNN",0,0,"eraAbbr"),q("NNNN",0,0,"eraName"),q("NNNNN",0,0,"eraNarrow"),q("y",["y",1],"yo","eraYear"),q("y",["yy",2],0,"eraYear"),q("y",["yyy",3],0,"eraYear"),q("y",["yyyy",4],0,"eraYear"),Le("N",Fi),Le("NN",Fi),Le("NNN",Fi),Le("NNNN",Ui),Le("NNNNN",qi),Ue(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var i=n._locale.erasParse(e,r,n._strict);i?v(n).era=i:v(n).invalidEra=e})),Le("y",Te),Le("yy",Te),Le("yyy",Te),Le("yyyy",Te),Le("yo",zi),Ue(["y","yy","yyy","yyyy"],He),Ue(["yo"],(function(e,t,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[He]=n._locale.eraYearOrdinalParse(e,i):t[He]=parseInt(e,10)})),q(0,["gg",2],0,(function(){return this.weekYear()%100})),q(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Hi("gggg","weekYear"),Hi("ggggg","weekYear"),Hi("GGGG","isoWeekYear"),Hi("GGGGG","isoWeekYear"),ne("weekYear","gg"),ne("isoWeekYear","GG"),ae("weekYear",1),ae("isoWeekYear",1),Le("G",Ne),Le("g",Ne),Le("GG",_e,ye),Le("gg",_e,ye),Le("GGGG",Oe,we),Le("gggg",Oe,we),Le("GGGGG",Ce,xe),Le("ggggg",Ce,xe),qe(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=ce(e)})),qe(["gg","GG"],(function(e,t,n,i){t[i]=r.parseTwoDigitYear(e)})),q("Q",0,"Qo","quarter"),ne("quarter","Q"),ae("quarter",7),Le("Q",ge),Ue("Q",(function(e,t){t[Ve]=3*(ce(e)-1)})),q("D",["DD",2],"Do","date"),ne("date","D"),ae("date",9),Le("D",_e),Le("DD",_e,ye),Le("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Ue(["D","DD"],Ye),Ue("Do",(function(e,t){t[Ye]=ce(e.match(_e)[0])}));var Ji=fe("Date",!0);function eo(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}q("DDD",["DDDD",3],"DDDo","dayOfYear"),ne("dayOfYear","DDD"),ae("dayOfYear",4),Le("DDD",Ee),Le("DDDD",be),Ue(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=ce(e)})),q("m",["mm",2],0,"minute"),ne("minute","m"),ae("minute",14),Le("m",_e),Le("mm",_e,ye),Ue(["m","mm"],Ge);var to=fe("Minutes",!1);q("s",["ss",2],0,"second"),ne("second","s"),ae("second",15),Le("s",_e),Le("ss",_e,ye),Ue(["s","ss"],$e);var no,ro,io=fe("Seconds",!1);for(q("S",0,0,(function(){return~~(this.millisecond()/100)})),q(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),q(0,["SSS",3],0,"millisecond"),q(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),q(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),q(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),q(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),q(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),q(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),ne("millisecond","ms"),ae("millisecond",16),Le("S",Ee,ge),Le("SS",Ee,ye),Le("SSS",Ee,be),no="SSSS";no.length<=9;no+="S")Le(no,Te);function oo(e,t){t[Qe]=ce(1e3*("0."+e))}for(no="S";no.length<=9;no+="S")Ue(no,oo);function ao(){return this._isUTC?"UTC":""}function so(){return this._isUTC?"Coordinated Universal Time":""}ro=fe("Milliseconds",!1),q("z",0,0,"zoneAbbr"),q("zz",0,0,"zoneName");var lo=_.prototype;function uo(e){return Qn(1e3*e)}function co(){return Qn.apply(null,arguments).parseZone()}function fo(e){return e}lo.add=Lr,lo.calendar=Br,lo.clone=Hr,lo.diff=Xr,lo.endOf=gi,lo.format=ti,lo.from=ni,lo.fromNow=ri,lo.to=ii,lo.toNow=oi,lo.get=pe,lo.invalidAt=Oi,lo.isAfter=Vr,lo.isBefore=Yr,lo.isBetween=Wr,lo.isSame=Gr,lo.isSameOrAfter=$r,lo.isSameOrBefore=Qr,lo.isValid=Si,lo.lang=si,lo.locale=ai,lo.localeData=li,lo.max=Zn,lo.min=Xn,lo.parsingFlags=Ei,lo.set=me,lo.startOf=vi,lo.subtract=Dr,lo.toArray=xi,lo.toObject=_i,lo.toDate=wi,lo.toISOString=Jr,lo.inspect=ei,"undefined"!==typeof Symbol&&null!=Symbol.for&&(lo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),lo.toJSON=ki,lo.toString=Kr,lo.unix=bi,lo.valueOf=yi,lo.creationData=Ci,lo.eraName=Ai,lo.eraNarrow=ji,lo.eraAbbr=Pi,lo.eraYear=Li,lo.year=vt,lo.isLeapYear=gt,lo.weekYear=Vi,lo.isoWeekYear=Yi,lo.quarter=lo.quarters=Ki,lo.month=ct,lo.daysInMonth=ft,lo.week=lo.weeks=Tt,lo.isoWeek=lo.isoWeeks=Nt,lo.weeksInYear=$i,lo.weeksInWeekYear=Qi,lo.isoWeeksInYear=Wi,lo.isoWeeksInISOWeekYear=Gi,lo.date=Ji,lo.day=lo.days=Vt,lo.weekday=Yt,lo.isoWeekday=Wt,lo.dayOfYear=eo,lo.hour=lo.hours=rn,lo.minute=lo.minutes=to,lo.second=lo.seconds=io,lo.millisecond=lo.milliseconds=ro,lo.utcOffset=mr,lo.utc=gr,lo.local=yr,lo.parseZone=br,lo.hasAlignedHourOffset=wr,lo.isDST=xr,lo.isLocal=kr,lo.isUtcOffset=Sr,lo.isUtc=Er,lo.isUTC=Er,lo.zoneAbbr=ao,lo.zoneName=so,lo.dates=E("dates accessor is deprecated. Use date instead.",Ji),lo.months=E("months accessor is deprecated. Use month instead",ct),lo.years=E("years accessor is deprecated. Use year instead",vt),lo.zone=E("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",vr),lo.isDSTShifted=E("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",_r);var ho=j.prototype;function po(e,t,n,r){var i=yn(),o=p().set(r,t);return i[n](o,e)}function mo(e,t,n){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return po(e,t,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=po(e,r,n,"month");return i}function vo(e,t,n,r){"boolean"===typeof e?(c(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,c(t)&&(n=t,t=void 0),t=t||"");var i,o=yn(),a=e?o._week.dow:0,s=[];if(null!=n)return po(t,(n+a)%7,r,"day");for(i=0;i<7;i++)s[i]=po(t,(i+a)%7,r,"day");return s}function go(e,t){return mo(e,t,"months")}function yo(e,t){return mo(e,t,"monthsShort")}function bo(e,t,n){return vo(e,t,n,"weekdays")}function wo(e,t,n){return vo(e,t,n,"weekdaysShort")}function xo(e,t,n){return vo(e,t,n,"weekdaysMin")}ho.calendar=L,ho.longDateFormat=W,ho.invalidDate=$,ho.ordinal=Z,ho.preparse=fo,ho.postformat=fo,ho.relativeTime=J,ho.pastFuture=ee,ho.set=M,ho.eras=Ti,ho.erasParse=Ni,ho.erasConvertYear=Mi,ho.erasAbbrRegex=Ri,ho.erasNameRegex=Di,ho.erasNarrowRegex=Ii,ho.months=ot,ho.monthsShort=at,ho.monthsParse=lt,ho.monthsRegex=ht,ho.monthsShortRegex=dt,ho.week=St,ho.firstDayOfYear=Ct,ho.firstDayOfWeek=Ot,ho.weekdays=Ut,ho.weekdaysMin=zt,ho.weekdaysShort=qt,ho.weekdaysParse=Ht,ho.weekdaysRegex=Gt,ho.weekdaysShortRegex=$t,ho.weekdaysMinRegex=Qt,ho.isPM=tn,ho.meridiem=on,mn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===ce(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),r.lang=E("moment.lang is deprecated. Use moment.locale instead.",mn),r.langData=E("moment.langData is deprecated. Use moment.localeData instead.",yn);var _o=Math.abs;function ko(){var e=this._data;return this._milliseconds=_o(this._milliseconds),this._days=_o(this._days),this._months=_o(this._months),e.milliseconds=_o(e.milliseconds),e.seconds=_o(e.seconds),e.minutes=_o(e.minutes),e.hours=_o(e.hours),e.months=_o(e.months),e.years=_o(e.years),this}function So(e,t,n,r){var i=Tr(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Eo(e,t){return So(this,e,t,1)}function Oo(e,t){return So(this,e,t,-1)}function Co(e){return e<0?Math.floor(e):Math.ceil(e)}function To(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||o<=0&&a<=0&&s<=0||(o+=864e5*Co(Mo(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=ue(o/1e3),l.seconds=e%60,t=ue(e/60),l.minutes=t%60,n=ue(t/60),l.hours=n%24,a+=ue(n/24),s+=i=ue(No(a)),a-=Co(Mo(i)),r=ue(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function No(e){return 4800*e/146097}function Mo(e){return 146097*e/4800}function Ao(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=re(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+No(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Mo(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function jo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*ce(this._months/12):NaN}function Po(e){return function(){return this.as(e)}}var Lo=Po("ms"),Do=Po("s"),Ro=Po("m"),Io=Po("h"),Fo=Po("d"),Uo=Po("w"),qo=Po("M"),zo=Po("Q"),Bo=Po("y");function Ho(){return Tr(this)}function Vo(e){return e=re(e),this.isValid()?this[e+"s"]():NaN}function Yo(e){return function(){return this.isValid()?this._data[e]:NaN}}var Wo=Yo("milliseconds"),Go=Yo("seconds"),$o=Yo("minutes"),Qo=Yo("hours"),Xo=Yo("days"),Zo=Yo("months"),Ko=Yo("years");function Jo(){return ue(this.days()/7)}var ea=Math.round,ta={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function na(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function ra(e,t,n,r){var i=Tr(e).abs(),o=ea(i.as("s")),a=ea(i.as("m")),s=ea(i.as("h")),l=ea(i.as("d")),u=ea(i.as("M")),c=ea(i.as("w")),f=ea(i.as("y")),d=o<=n.ss&&["s",o]||o0,d[4]=r,na.apply(null,d)}function ia(e){return void 0===e?ea:"function"===typeof e&&(ea=e,!0)}function oa(e,t){return void 0!==ta[e]&&(void 0===t?ta[e]:(ta[e]=t,"s"===e&&(ta.ss=t-1),!0))}function aa(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,o=ta;return"object"===typeof e&&(t=e,e=!1),"boolean"===typeof e&&(i=e),"object"===typeof t&&(o=Object.assign({},ta,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1)),r=ra(this,!i,o,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)}var sa=Math.abs;function la(e){return(e>0)-(e<0)||+e}function ua(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,i,o,a,s,l=sa(this._milliseconds)/1e3,u=sa(this._days),c=sa(this._months),f=this.asSeconds();return f?(e=ue(l/60),t=ue(e/60),l%=60,e%=60,n=ue(c/12),c%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",i=f<0?"-":"",o=la(this._months)!==la(f)?"-":"",a=la(this._days)!==la(f)?"-":"",s=la(this._milliseconds)!==la(f)?"-":"",i+"P"+(n?o+n+"Y":"")+(c?o+c+"M":"")+(u?a+u+"D":"")+(t||e||l?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(l?s+r+"S":"")):"P0D"}var ca=ar.prototype;return ca.isValid=ir,ca.abs=ko,ca.add=Eo,ca.subtract=Oo,ca.as=Ao,ca.asMilliseconds=Lo,ca.asSeconds=Do,ca.asMinutes=Ro,ca.asHours=Io,ca.asDays=Fo,ca.asWeeks=Uo,ca.asMonths=qo,ca.asQuarters=zo,ca.asYears=Bo,ca.valueOf=jo,ca._bubble=To,ca.clone=Ho,ca.get=Vo,ca.milliseconds=Wo,ca.seconds=Go,ca.minutes=$o,ca.hours=Qo,ca.days=Xo,ca.weeks=Jo,ca.months=Zo,ca.years=Ko,ca.humanize=aa,ca.toISOString=ua,ca.toString=ua,ca.toJSON=ua,ca.locale=ai,ca.localeData=li,ca.toIsoString=E("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ua),ca.lang=si,q("X",0,0,"unix"),q("x",0,0,"valueOf"),Le("x",Ne),Le("X",je),Ue("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Ue("x",(function(e,t,n){n._d=new Date(ce(e))})),r.version="2.29.4",i(Qn),r.fn=lo,r.min=Jn,r.max=er,r.now=tr,r.utc=p,r.unix=uo,r.months=go,r.isDate=f,r.locale=mn,r.invalid=y,r.duration=Tr,r.isMoment=k,r.weekdays=bo,r.parseZone=co,r.localeData=yn,r.isDuration=sr,r.monthsShort=yo,r.weekdaysMin=xo,r.defineLocale=vn,r.updateLocale=gn,r.locales=bn,r.weekdaysShort=wo,r.normalizeUnits=re,r.relativeTimeRounding=ia,r.relativeTimeThreshold=oa,r.calendarFormat=zr,r.prototype=lo,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()},2267:function(e,t){var n,r,i;r=[],void 0===(i="function"===typeof(n=function(){return function(e){function t(e){return" "===e||"\t"===e||"\n"===e||"\f"===e||"\r"===e}function n(t){var n,r=t.exec(e.substring(m));if(r)return n=r[0],m+=n.length,n}for(var r,i,o,a,s,l=e.length,u=/^[ \t\n\r\u000c]+/,c=/^[, \t\n\r\u000c]+/,f=/^[^ \t\n\r\u000c]+/,d=/[,]+$/,h=/^\d+$/,p=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,m=0,v=[];;){if(n(c),m>=l)return v;r=n(f),i=[],","===r.slice(-1)?(r=r.replace(d,""),y()):g()}function g(){for(n(u),o="",a="in descriptor";;){if(s=e.charAt(m),"in descriptor"===a)if(t(s))o&&(i.push(o),o="",a="after descriptor");else{if(","===s)return m+=1,o&&i.push(o),void y();if("("===s)o+=s,a="in parens";else{if(""===s)return o&&i.push(o),void y();o+=s}}else if("in parens"===a)if(")"===s)o+=s,a="in descriptor";else{if(""===s)return i.push(o),void y();o+=s}else if("after descriptor"===a)if(t(s));else{if(""===s)return void y();a="in descriptor",m-=1}m+=1}}function y(){var t,n,o,a,s,l,u,c,f,d=!1,m={};for(a=0;a=e&&(this.indexes[n]=t-1);return this.markDirty(),this}},{key:"removeAll",value:function(){var e,t=h(this.proxyOf.nodes);try{for(t.s();!(e=t.n()).done;){e.value.parent=void 0}}catch(n){t.e(n)}finally{t.f()}return this.proxyOf.nodes=[],this.markDirty(),this}},{key:"replaceValues",value:function(e,t,n){return n||(n=t,t={}),this.walkDecls((function(r){t.props&&!t.props.includes(r.prop)||t.fast&&!r.value.includes(t.fast)||(r.value=r.value.replace(e,n))})),this.markDirty(),this}},{key:"every",value:function(e){return this.nodes.every(e)}},{key:"some",value:function(e){return this.nodes.some(e)}},{key:"index",value:function(e){return"number"===typeof e?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}},{key:"first",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}},{key:"last",get:function(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}},{key:"normalize",value:function(e,t){var a=this;if("string"===typeof e)e=b(r(e).nodes);else if(Array.isArray(e)){e=e.slice(0);var s,l=h(e);try{for(l.s();!(s=l.n()).done;){var u=s.value;u.parent&&u.parent.removeChild(u,"ignore")}}catch(x){l.e(x)}finally{l.f()}}else if("root"===e.type&&"document"!==this.type){e=e.nodes.slice(0);var c,f=h(e);try{for(f.s();!(c=f.n()).done;){var d=c.value;d.parent&&d.parent.removeChild(d,"ignore")}}catch(x){f.e(x)}finally{f.f()}}else if(e.type)e=[e];else if(e.prop){if("undefined"===typeof e.value)throw new Error("Value field is missed in node creation");"string"!==typeof e.value&&(e.value=String(e.value)),e=[new g(e)]}else if(e.selector)e=[new i(e)];else if(e.name)e=[new o(e)];else{if(!e.text)throw new Error("Unknown node type in node creation");e=[new y(e)]}var p=e.map((function(e){return e[v]||n.rebuild(e),(e=e.proxyOf).parent&&e.parent.removeChild(e),e[m]&&w(e),"undefined"===typeof e.raws.before&&t&&"undefined"!==typeof t.raws.before&&(e.raws.before=t.raws.before.replace(/\S/g,"")),e.parent=a.proxyOf,e}));return p}},{key:"getProxyProcessor",value:function(){return{set:function(e,t,n){return e[t]===n||(e[t]=n,"name"!==t&&"params"!==t&&"selector"!==t||e.markDirty()),!0},get:function(e,t){return"proxyOf"===t?e:e[t]?"each"===t||"string"===typeof t&&t.startsWith("walk")?function(){for(var n=arguments.length,r=new Array(n),i=0;i1?t-1:0),i=1;i","undefined"!==typeof this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}},{key:"showSourceCode",value:function(e){var t=this;if(!this.source)return"";var n=this.source;null==e&&(e=u.isColorSupported),c&&e&&(n=c(n));var r,i,o=n.split(/\r?\n/),a=Math.max(this.line-3,0),s=Math.min(this.line+2,o.length),l=String(s).length;if(e){var f=u.createColors(!0),d=f.bold,h=f.red,p=f.gray;r=function(e){return d(h(e))},i=function(e){return p(e)}}else r=i=function(e){return e};return o.slice(a,s).map((function(e,n){var o=a+1+n,s=" "+(" "+o).slice(-l)+" | ";if(o===t.line){var u=i(s.replace(/\d/g," "))+e.slice(0,t.column-1).replace(/[^\t]/g," ");return r(">")+i(s)+e+"\n "+u+r("^")}return" "+i(s)+e})).join("\n")}},{key:"toString",value:function(){var e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e}}]),n}(l(Error));e.exports=f,f.default=f},671:function(e,t,n){"use strict";var r=n(3137).default,i=n(3937).default,o=n(1788).default,a=n(6406).default,s=n(1001).default,l=function(e){a(n,e);var t=s(n);function n(e){var o;return i(this,n),e&&"undefined"!==typeof e.value&&"string"!==typeof e.value&&(e=r(r({},e),{},{value:String(e.value)})),(o=t.call(this,e)).type="decl",o}return o(n,[{key:"variable",get:function(){return this.prop.startsWith("--")||"$"===this.prop[0]}}]),n}(n(9735));e.exports=l,l.default=l},6675:function(e,t,n){"use strict";var r,i,o=n(3137).default,a=n(3937).default,s=n(1788).default,l=n(6406).default,u=n(1001).default,c=function(e){l(n,e);var t=u(n);function n(e){var r;return a(this,n),(r=t.call(this,o({type:"document"},e))).nodes||(r.nodes=[]),r}return s(n,[{key:"toResult",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new r(new i,this,e);return t.stringify()}}]),n}(n(8539));c.registerLazyResult=function(e){r=e},c.registerProcessor=function(e){i=e},e.exports=c,c.default=c},5385:function(e,t,n){"use strict";var r=n(3137).default,i=n(6913).default,o=n(5956).default,a=["inputs"],s=["inputId"],l=n(671),u=n(386),c=n(6811),f=n(8662),d=n(5341),h=n(1847),p=n(5605);function m(e,t){if(Array.isArray(e))return e.map((function(e){return m(e)}));var n=e.inputs,v=o(e,a);if(n){t=[];var g,y=i(n);try{for(y.s();!(g=y.n()).done;){var b=g.value,w=r(r({},b),{},{__proto__:d.prototype});w.map&&(w.map=r(r({},w.map),{},{__proto__:u.prototype})),t.push(w)}}catch(S){y.e(S)}finally{y.f()}}if(v.nodes&&(v.nodes=e.nodes.map((function(e){return m(e,t)}))),v.source){var x=v.source,_=x.inputId,k=o(x,s);v.source=k,null!=_&&(v.source.input=t[_])}if("root"===v.type)return new h(v);if("decl"===v.type)return new l(v);if("rule"===v.type)return new p(v);if("comment"===v.type)return new c(v);if("atrule"===v.type)return new f(v);throw new Error("Unknown node type: "+e.type)}e.exports=m,m.default=m},5341:function(e,t,n){"use strict";var r=n(3137).default,i=n(3937).default,o=n(1788).default,a=n(9806),s=a.SourceMapConsumer,l=a.SourceMapGenerator,u=n(9299),c=u.fileURLToPath,f=u.pathToFileURL,d=n(5728),h=d.resolve,p=d.isAbsolute,m=n(516).nanoid,v=n(2500),g=n(3291),y=n(386),b=Symbol("fromOffsetCache"),w=Boolean(s&&l),x=Boolean(h&&p),_=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,e),null===t||"undefined"===typeof t||"object"===typeof t&&!t.toString)throw new Error("PostCSS received ".concat(t," instead of CSS string"));if(this.css=t.toString(),"\ufeff"===this.css[0]||"\ufffe"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,n.from&&(!x||/^\w+:\/\//.test(n.from)||p(n.from)?this.file=n.from:this.file=h(n.from)),x&&w){var r=new y(this.css,n);if(r.text){this.map=r;var o=r.consumer().file;!this.file&&o&&(this.file=this.mapResolve(o))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}return o(e,[{key:"fromOffset",value:function(e){var t;if(this[b])t=this[b];else{var n=this.css.split("\n");t=new Array(n.length);for(var r=0,i=0,o=n.length;i=t[t.length-1])a=t.length-1;else for(var s,l=t.length-2;a>1)])l=s-1;else{if(!(e>=t[s+1])){a=s;break}a=s+1}return{line:a+1,col:e-t[a]+1}}},{key:"error",value:function(e,t,n){var r,i,o,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(t&&"object"===typeof t){var s=t,l=n;if("number"===typeof t.offset){var u=this.fromOffset(s.offset);t=u.line,n=u.col}else t=s.line,n=s.column;if("number"===typeof l.offset){var c=this.fromOffset(l.offset);i=c.line,o=c.col}else i=l.line,o=l.column}else if(!n){var d=this.fromOffset(t);t=d.line,n=d.col}var h=this.origin(t,n,i,o);return(r=h?new g(e,void 0===h.endLine?h.line:{line:h.line,column:h.column},void 0===h.endLine?h.column:{line:h.endLine,column:h.endColumn},h.source,h.file,a.plugin):new g(e,void 0===i?t:{line:t,column:n},void 0===i?n:{line:i,column:o},this.css,this.file,a.plugin)).input={line:t,column:n,endLine:i,endColumn:o,source:this.css},this.file&&(f&&(r.input.url=f(this.file).toString()),r.input.file=this.file),r}},{key:"origin",value:function(e,t,n,r){if(!this.map)return!1;var i,o,a=this.map.consumer(),s=a.originalPositionFor({line:e,column:t});if(!s.source)return!1;"number"===typeof n&&(i=a.originalPositionFor({line:n,column:r}));var l={url:(o=p(s.source)?f(s.source):new URL(s.source,this.map.consumer().sourceRoot||f(this.map.mapFile))).toString(),line:s.line,column:s.column,endLine:i&&i.line,endColumn:i&&i.column};if("file:"===o.protocol){if(!c)throw new Error("file: protocol is not available in this PostCSS build");l.file=c(o)}var u=a.sourceContentFor(s.source);return u&&(l.source=u),l}},{key:"mapResolve",value:function(e){return/^\w+:\/\//.test(e)?e:h(this.map.consumer().sourceRoot||this.map.root||".",e)}},{key:"from",get:function(){return this.file||this.id}},{key:"toJSON",value:function(){for(var e={},t=0,n=["hasBOM","css","file","id"];t0)){e.next=37;break}if(!k(u=this.visitTick(l))){e.next=35;break}return e.prev=26,e.next=29,u;case 29:e.next=35;break;case 31:throw e.prev=31,e.t1=e.catch(26),c=l[l.length-1].node,this.handleError(e.t1,c);case 35:e.next=23;break;case 37:e.next=20;break;case 39:if(!this.listeners.OnceExit){e.next=56;break}d=a(this.listeners.OnceExit),e.prev=41,p=r().mark((function e(){var t,n,i,a;return r().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=o(h.value,2),n=t[0],i=t[1],m.result.lastPlugin=n,e.prev=2,"document"!==s.type){e.next=9;break}return a=s.nodes.map((function(e){return i(e,m.helpers)})),e.next=7,Promise.all(a);case 7:e.next=11;break;case 9:return e.next=11,i(s,m.helpers);case 11:e.next=16;break;case 13:throw e.prev=13,e.t0=e.catch(2),m.handleError(e.t0);case 16:case"end":return e.stop()}}),e,null,[[2,13]])})),d.s();case 44:if((h=d.n()).done){e.next=48;break}return e.delegateYield(p(),"t2",46);case 46:e.next=44;break;case 48:e.next=53;break;case 50:e.prev=50,e.t3=e.catch(41),d.e(e.t3);case 53:return e.prev=53,d.f(),e.finish(53);case 56:return this.processed=!0,e.abrupt("return",this.stringify());case 58:case"end":return e.stop()}}),e,this,[[6,11],[26,31],[41,50,53,56]])})));return function(){return e.apply(this,arguments)}}()},{key:"prepareVisitors",value:function(){var e=this;this.listeners={};var t,n=function(t,n,r){e.listeners[n]||(e.listeners[n]=[]),e.listeners[n].push([t,r])},r=a(this.plugins);try{for(r.s();!(t=r.n()).done;){var i=t.value;if("object"===typeof i)for(var o in i){if(!x[o]&&/^[A-Z]/.test(o))throw new Error("Unknown event ".concat(o," in ").concat(i.postcssPlugin,". ")+"Try to update PostCSS (".concat(this.processor.version," now)."));if(!_[o])if("object"===typeof i[o])for(var s in i[o])n(i,"*"===s?o:o+"-"+s.toLowerCase(),i[o][s]);else"function"===typeof i[o]&&n(i,o,i[o])}}}catch(l){r.e(l)}finally{r.f()}this.hasListener=Object.keys(this.listeners).length>0}},{key:"visitTick",value:function(e){var t=e[e.length-1],n=t.node,r=t.visitors;if("root"===n.type||"document"===n.type||n.parent){if(r.length>0&&t.visitorIndex0&&(l-=1):0===l&&t.includes(d)&&(s=!0),s?(""!==a&&o.push(a.trim()),a="",s=!1):a+=d}}catch(h){f.e(h)}finally{f.f()}return(n||""!==a)&&o.push(a.trim()),o},space:function(e){return i.split(e,[" ","\n","\t"])},comma:function(e){return i.split(e,[","],!0)}};e.exports=i,i.default=i},1901:function(e,t,n){"use strict";var r=n(6913).default,i=n(3937).default,o=n(1788).default,a=n(9806),s=a.SourceMapConsumer,l=a.SourceMapGenerator,u=n(5728),c=u.dirname,f=u.resolve,d=u.relative,h=u.sep,p=n(9299).pathToFileURL,m=n(5341),v=Boolean(s&&l),g=Boolean(c&&f&&d&&h),y=function(){function e(t,n,r,o){i(this,e),this.stringify=t,this.mapOpts=r.map||{},this.root=n,this.opts=r,this.css=o}return o(e,[{key:"isMap",value:function(){return"undefined"!==typeof this.opts.map?!!this.opts.map:this.previous().length>0}},{key:"previous",value:function(){var e=this;if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk((function(t){if(t.source&&t.source.input.map){var n=t.source.input.map;e.previousMaps.includes(n)||e.previousMaps.push(n)}}));else{var t=new m(this.css,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps}},{key:"isInline",value:function(){if("undefined"!==typeof this.mapOpts.inline)return this.mapOpts.inline;var e=this.mapOpts.annotation;return("undefined"===typeof e||!0===e)&&(!this.previous().length||this.previous().some((function(e){return e.inline})))}},{key:"isSourcesContent",value:function(){return"undefined"!==typeof this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some((function(e){return e.withContent()}))}},{key:"clearAnnotation",value:function(){if(!1!==this.mapOpts.annotation)if(this.root)for(var e,t=this.root.nodes.length-1;t>=0;t--)"comment"===(e=this.root.nodes[t]).type&&0===e.text.indexOf("# sourceMappingURL=")&&this.root.removeChild(t);else this.css&&(this.css=this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm,""))}},{key:"setSourcesContent",value:function(){var e=this,t={};if(this.root)this.root.walk((function(n){if(n.source){var r=n.source.input.from;r&&!t[r]&&(t[r]=!0,e.map.setSourceContent(e.toUrl(e.path(r)),n.source.input.css))}}));else if(this.css){var n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}}},{key:"applyPrevMaps",value:function(){var e,t=r(this.previous());try{for(t.s();!(e=t.n()).done;){var n=e.value,i=this.toUrl(this.path(n.file)),o=n.root||c(n.file),a=void 0;!1===this.mapOpts.sourcesContent?(a=new s(n.text)).sourcesContent&&(a.sourcesContent=a.sourcesContent.map((function(){return null}))):a=n.consumer(),this.map.applySourceMap(a,i,this.toUrl(this.path(o)))}}catch(l){t.e(l)}finally{t.f()}}},{key:"isAnnotation",value:function(){return!!this.isInline()||("undefined"!==typeof this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some((function(e){return e.annotation})))}},{key:"toBase64",value:function(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}},{key:"addAnnotation",value:function(){var e;e=this.isInline()?"data:application/json;base64,"+this.toBase64(this.map.toString()):"string"===typeof this.mapOpts.annotation?this.mapOpts.annotation:"function"===typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+".map";var t="\n";this.css.includes("\r\n")&&(t="\r\n"),this.css+=t+"/*# sourceMappingURL="+e+" */"}},{key:"outputFile",value:function(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}},{key:"generateMap",value:function(){if(this.root)this.generateString();else if(1===this.previous().length){var e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=l.fromSourceMap(e)}else this.map=new l({file:this.outputFile()}),this.map.addMapping({source:this.opts.from?this.toUrl(this.path(this.opts.from)):"",generated:{line:1,column:0},original:{line:1,column:0}});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}},{key:"path",value:function(e){if(0===e.indexOf("<"))return e;if(/^\w+:\/\//.test(e))return e;if(this.mapOpts.absolute)return e;var t=this.opts.to?c(this.opts.to):".";return"string"===typeof this.mapOpts.annotation&&(t=c(f(t,this.mapOpts.annotation))),e=d(t,e)}},{key:"toUrl",value:function(e){return"\\"===h&&(e=e.replace(/\\/g,"/")),encodeURI(e).replace(/[#?]/g,encodeURIComponent)}},{key:"sourcePath",value:function(e){if(this.mapOpts.from)return this.toUrl(this.mapOpts.from);if(this.mapOpts.absolute){if(p)return p(e.source.input.from).toString();throw new Error("`map.absolute` option is not available in this PostCSS build")}return this.toUrl(this.path(e.source.input.from))}},{key:"generateString",value:function(){var e=this;this.css="",this.map=new l({file:this.outputFile()});var t,n,r=1,i=1,o="",a={source:"",generated:{line:0,column:0},original:{line:0,column:0}};this.stringify(this.root,(function(s,l,u){if(e.css+=s,l&&"end"!==u&&(a.generated.line=r,a.generated.column=i-1,l.source&&l.source.start?(a.source=e.sourcePath(l),a.original.line=l.source.start.line,a.original.column=l.source.start.column-1,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,e.map.addMapping(a))),(t=s.match(/\n/g))?(r+=t.length,n=s.lastIndexOf("\n"),i=s.length-n):i+=s.length,l&&"start"!==u){var c=l.parent||{raws:{}};("decl"!==l.type||l!==c.last||c.raws.semicolon)&&(l.source&&l.source.end?(a.source=e.sourcePath(l),a.original.line=l.source.end.line,a.original.column=l.source.end.column-1,a.generated.line=r,a.generated.column=i-2,e.map.addMapping(a)):(a.source=o,a.original.line=1,a.original.column=0,a.generated.line=r,a.generated.column=i-1,e.map.addMapping(a)))}}))}},{key:"generate",value:function(){if(this.clearAnnotation(),g&&v&&this.isMap())return this.generateMap();var e="";return this.stringify(this.root,(function(t){e+=t})),[e]}}]),e}();e.exports=y},2707:function(e,t,n){"use strict";var r=n(8120).default,i=n(3937).default,o=n(1788).default,a=n(1901),s=n(4964),l=(n(1653),n(3418)),u=n(7707),c=function(e){function t(e,n,o){var l;i(this,t),n=n.toString(),this.stringified=!1,this._processor=e,this._css=n,this._opts=o,this._map=void 0;var c=s;this.result=new u(this._processor,l,this._opts),this.result.css=n;var f=this;Object.defineProperty(this.result,"root",{get:function(){return f.root}});var d=new a(c,l,this._opts,n);if(d.isMap()){var h=d.generate(),p=r(h,2),m=p[0],v=p[1];m&&(this.result.css=m),v&&(this.result.map=v)}}return o(t,[{key:e,get:function(){return"NoWorkResult"}},{key:"processor",get:function(){return this.result.processor}},{key:"opts",get:function(){return this.result.opts}},{key:"css",get:function(){return this.result.css}},{key:"content",get:function(){return this.result.css}},{key:"map",get:function(){return this.result.map}},{key:"root",get:function(){if(this._root)return this._root;var e,t=l;try{e=t(this._css,this._opts)}catch(n){this.error=n}if(this.error)throw this.error;return this._root=e,e}},{key:"messages",get:function(){return[]}},{key:"warnings",value:function(){return[]}},{key:"toString",value:function(){return this._css}},{key:"then",value:function(e,t){return this.async().then(e,t)}},{key:"catch",value:function(e){return this.async().catch(e)}},{key:"finally",value:function(e){return this.async().then(e,e)}},{key:"async",value:function(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}},{key:"sync",value:function(){if(this.error)throw this.error;return this.result}}]),t}(Symbol.toStringTag);e.exports=c,c.default=c},9735:function(e,t,n){"use strict";var r=n(4183).default,i=n(6913).default,o=n(3937).default,a=n(1788).default,s=n(5662),l=s.isClean,u=s.my,c=n(3291),f=n(3882),d=n(4964);function h(e,t){var n=new e.constructor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&"proxyCache"!==r){var i=e[r],o=typeof i;"parent"===r&&"object"===o?t&&(n[r]=t):"source"===r?n[r]=i:Array.isArray(i)?n[r]=i.map((function(e){return h(e,n)})):("object"===o&&null!==i&&(i=h(i)),n[r]=i)}return n}var p=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var n in o(this,e),this.raws={},this[l]=!1,this[u]=!0,t)if("nodes"===n){this.nodes=[];var r,a=i(t[n]);try{for(a.s();!(r=a.n()).done;){var s=r.value;"function"===typeof s.clone?this.append(s.clone()):this.append(s)}}catch(c){a.e(c)}finally{a.f()}}else this[n]=t[n]}return a(e,[{key:"error",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.source){var n=this.rangeBy(t),r=n.start,i=n.end;return this.source.input.error(e,{line:r.line,column:r.column},{line:i.line,column:i.column},t)}return new c(e)}},{key:"warn",value:function(e,t,n){var r={node:this};for(var i in n)r[i]=n[i];return e.warn(t,r)}},{key:"remove",value:function(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}},{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d;e.stringify&&(e=e.stringify);var t="";return e(this,(function(e){t+=e})),t}},{key:"assign",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var t in e)this[t]=e[t];return this}},{key:"clone",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=h(this);for(var n in e)t[n]=e[n];return t}},{key:"cloneBefore",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.clone(e);return this.parent.insertBefore(this,t),t}},{key:"cloneAfter",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.clone(e);return this.parent.insertAfter(this,t),t}},{key:"replaceWith",value:function(){if(this.parent){for(var e=this,t=!1,n=arguments.length,r=new Array(n),i=0;i0&&this.unclosedBracket(i),t&&r){if(!a)for(;s.length&&("space"===(l=s[s.length-1][0])||"comment"===l);)this.tokenizer.back(s.pop());this.decl(s,a)}else this.unknownWord(s)}},{key:"rule",value:function(e){e.pop();var t=new d;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,"selector",e),this.current=t}},{key:"decl",value:function(e,t){var n=new s;this.init(n,e[0][2]);var r,i=e[e.length-1];for(";"===i[0]&&(this.semicolon=!0,e.pop()),n.source.end=this.getPosition(i[3]||i[2]||function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=n[3]||n[2];if(r)return r}}(e));"word"!==e[0][0];)1===e.length&&this.unknownWord(e),n.raws.before+=e.shift()[1];for(n.source.start=this.getPosition(e[0][2]),n.prop="";e.length;){var o=e[0][0];if(":"===o||"space"===o||"comment"===o)break;n.prop+=e.shift()[1]}for(n.raws.between="";e.length;){if(":"===(r=e.shift())[0]){n.raws.between+=r[1];break}"word"===r[0]&&/\w/.test(r[1])&&this.unknownWord([r]),n.raws.between+=r[1]}"_"!==n.prop[0]&&"*"!==n.prop[0]||(n.raws.before+=n.prop[0],n.prop=n.prop.slice(1));for(var a,l=[];e.length&&("space"===(a=e[0][0])||"comment"===a);)l.push(e.shift());this.precheckMissedSemicolon(e);for(var u=e.length-1;u>=0;u--){if("!important"===(r=e[u])[1].toLowerCase()){n.important=!0;var c=this.stringFrom(e,u);" !important"!==(c=this.spacesFromEnd(e)+c)&&(n.raws.important=c);break}if("important"===r[1].toLowerCase()){for(var f=e.slice(0),d="",h=u;h>0;h--){var p=f[h][0];if(0===d.trim().indexOf("!")&&"space"!==p)break;d=f.pop()[1]+d}0===d.trim().indexOf("!")&&(n.important=!0,n.raws.important=d,e=f)}if("space"!==r[0]&&"comment"!==r[0])break}var m=e.some((function(e){return"space"!==e[0]&&"comment"!==e[0]}));m&&(n.raws.between+=l.map((function(e){return e[1]})).join(""),l=[]),this.raw(n,"value",l.concat(e),t),n.value.includes(":")&&!t&&this.checkMissedSemicolon(e)}},{key:"atrule",value:function(e){var t,n,r,i=new c;i.name=e[1].slice(1),""===i.name&&this.unnamedAtrule(i,e),this.init(i,e[2]);for(var o=!1,a=!1,s=[],l=[];!this.tokenizer.endOfFile();){if("("===(t=(e=this.tokenizer.nextToken())[0])||"["===t?l.push("("===t?")":"]"):"{"===t&&l.length>0?l.push("}"):t===l[l.length-1]&&l.pop(),0===l.length){if(";"===t){i.source.end=this.getPosition(e[2]),this.semicolon=!0;break}if("{"===t){a=!0;break}if("}"===t){if(s.length>0){for(n=s[r=s.length-1];n&&"space"===n[0];)n=s[--r];n&&(i.source.end=this.getPosition(n[3]||n[2]))}this.end(e);break}s.push(e)}else s.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}i.raws.between=this.spacesAndCommentsFromEnd(s),s.length?(i.raws.afterName=this.spacesAndCommentsFromStart(s),this.raw(i,"params",s),o&&(e=s[s.length-1],i.source.end=this.getPosition(e[3]||e[2]),this.spaces=i.raws.between,i.raws.between="")):(i.raws.afterName="",i.params=""),a&&(i.nodes=[],this.current=i)}},{key:"end",value:function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current=this.current.parent):this.unexpectedClose(e)}},{key:"endFile",value:function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces}},{key:"freeSemicolon",value:function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&"rule"===t.type&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}}},{key:"getPosition",value:function(e){var t=this.input.fromOffset(e);return{offset:e,line:t.line,column:t.col}}},{key:"init",value:function(e,t){this.current.push(e),e.source={start:this.getPosition(t),input:this.input},e.raws.before=this.spaces,this.spaces="","comment"!==e.type&&(this.semicolon=!1)}},{key:"raw",value:function(e,t,n,r){for(var i,o,a,s,l=n.length,u="",c=!0,f=0;f=0&&("space"===(n=e[i])[0]||2!==(r+=1));i--);throw this.input.error("Missed semicolon","word"===n[0]?n[3]+1:n[2])}}}]),e}();e.exports=p},950:function(e,t,n){"use strict";var r=n(3291),i=n(671),o=n(694),a=n(8539),s=n(5444),l=n(4964),u=n(5385),c=n(6675),f=n(2176),d=n(6811),h=n(8662),p=n(7707),m=n(5341),v=n(3418),g=n(8820),y=n(5605),b=n(1847),w=n(9735);function x(){for(var e=arguments.length,t=new Array(e),n=0;n0)}},{key:"startWith",value:function(e,t){return!!e&&e.substr(0,t.length)===t}},{key:"getAnnotationURL",value:function(e){return e.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}},{key:"loadAnnotation",value:function(e){var t=e.match(/\/\*\s*# sourceMappingURL=/gm);if(t){var n=e.lastIndexOf(t.pop()),r=e.indexOf("*/",n);n>-1&&r>-1&&(this.annotation=this.getAnnotationURL(e.substring(n,r)))}}},{key:"decodeInline",value:function(e){var t;if(/^data:application\/json;charset=utf-?8,/.test(e)||/^data:application\/json,/.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(/^data:application\/json;charset=utf-?8;base64,/.test(e)||/^data:application\/json;base64,/.test(e))return t=e.substr(RegExp.lastMatch.length),Buffer?Buffer.from(t,"base64").toString():window.atob(t);var n=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+n)}},{key:"loadFile",value:function(e){if(this.root=d(e),u(e))return this.mapFile=e,c(e,"utf-8").toString().trim()}},{key:"loadMap",value:function(e,t){if(!1===t)return!1;if(t){if("string"===typeof t)return t;if("function"!==typeof t){if(t instanceof a)return s.fromSourceMap(t).toString();if(t instanceof s)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}var n=t(e);if(n){var r=this.loadFile(n);if(!r)throw new Error("Unable to load previous source map: "+n.toString());return r}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var i=this.annotation;return e&&(i=h(d(e),i)),this.loadFile(i)}}}},{key:"isMap",value:function(e){return"object"===typeof e&&("string"===typeof e.mappings||"string"===typeof e._mappings||Array.isArray(e.sections))}}]),e}();e.exports=p,p.default=p},5444:function(e,t,n){"use strict";var r=n(6913).default,i=n(3937).default,o=n(1788).default,a=n(2707),s=n(694),l=n(6675),u=n(1847),c=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];i(this,e),this.version="8.4.13",this.plugins=this.normalize(t)}return o(e,[{key:"use",value:function(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}},{key:"process",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return 0===this.plugins.length&&"undefined"===typeof t.parser&&"undefined"===typeof t.stringifier&&"undefined"===typeof t.syntax?new a(this,e,t):new s(this,e,t)}},{key:"normalize",value:function(e){var t,n=[],i=r(e);try{for(i.s();!(t=i.n()).done;){var o=t.value;if(!0===o.postcss?o=o():o.postcss&&(o=o.postcss),"object"===typeof o&&Array.isArray(o.plugins))n=n.concat(o.plugins);else if("object"===typeof o&&o.postcssPlugin)n.push(o);else if("function"===typeof o)n.push(o);else{if("object"!==typeof o||!o.parse&&!o.stringify)throw new Error(o+" is not a PostCSS plugin")}}}catch(a){i.e(a)}finally{i.f()}return n}}]),e}();e.exports=c,c.default=c,u.registerProcessor(c),l.registerProcessor(c)},7707:function(e,t,n){"use strict";var r=n(3937).default,i=n(1788).default,o=n(2176),a=function(){function e(t,n,i){r(this,e),this.processor=t,this.messages=[],this.root=n,this.opts=i,this.css=void 0,this.map=void 0}return i(e,[{key:"toString",value:function(){return this.css}},{key:"warn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new o(e,t);return this.messages.push(n),n}},{key:"warnings",value:function(){return this.messages.filter((function(e){return"warning"===e.type}))}},{key:"content",get:function(){return this.css}}]),e}();e.exports=a,a.default=a},1847:function(e,t,n){"use strict";var r,i,o=n(6913).default,a=n(3937).default,s=n(1788).default,l=n(9282).default,u=n(3336).default,c=n(6406).default,f=n(1001).default,d=function(e){c(n,e);var t=f(n);function n(e){var r;return a(this,n),(r=t.call(this,e)).type="root",r.nodes||(r.nodes=[]),r}return s(n,[{key:"removeChild",value:function(e,t){var r=this.index(e);return!t&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),l(u(n.prototype),"removeChild",this).call(this,e)}},{key:"normalize",value:function(e,t,r){var i=l(u(n.prototype),"normalize",this).call(this,e);if(t)if("prepend"===r)this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t){var a,s=o(i);try{for(s.s();!(a=s.n()).done;){a.value.raws.before=t.raws.before}}catch(c){s.e(c)}finally{s.f()}}return i}},{key:"toResult",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new r(new i,this,e);return t.stringify()}}]),n}(n(8539));d.registerLazyResult=function(e){r=e},d.registerProcessor=function(e){i=e},e.exports=d,d.default=d},5605:function(e,t,n){"use strict";var r=n(3937).default,i=n(1788).default,o=n(6406).default,a=n(1001).default,s=n(8539),l=n(8820),u=function(e){o(n,e);var t=a(n);function n(e){var i;return r(this,n),(i=t.call(this,e)).type="rule",i.nodes||(i.nodes=[]),i}return i(n,[{key:"selectors",get:function(){return l.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}]),n}(s);e.exports=u,u.default=u,s.registerRule(u)},3882:function(e,t,n){"use strict";var r=n(3937).default,i=n(1788).default,o={colon:": ",indent:" ",beforeDecl:"\n",beforeRule:"\n",beforeOpen:" ",beforeClose:"\n",beforeComment:"\n",after:"\n",emptyBody:"",commentLeft:" ",commentRight:" ",semicolon:!1};var a=function(){function e(t){r(this,e),this.builder=t}return i(e,[{key:"stringify",value:function(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)}},{key:"document",value:function(e){this.body(e)}},{key:"root",value:function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}},{key:"comment",value:function(e){var t=this.raw(e,"left","commentLeft"),n=this.raw(e,"right","commentRight");this.builder("/*"+t+e.text+n+"*/",e)}},{key:"decl",value:function(e,t){var n=this.raw(e,"between","colon"),r=e.prop+n+this.rawValue(e,"value");e.important&&(r+=e.raws.important||" !important"),t&&(r+=";"),this.builder(r,e)}},{key:"rule",value:function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")}},{key:"atrule",value:function(e,t){var n="@"+e.name,r=e.params?this.rawValue(e,"params"):"";if("undefined"!==typeof e.raws.afterName?n+=e.raws.afterName:r&&(n+=" "),e.nodes)this.block(e,n+r);else{var i=(e.raws.between||"")+(t?";":"");this.builder(n+r+i,e)}}},{key:"body",value:function(e){for(var t=e.nodes.length-1;t>0&&"comment"===e.nodes[t].type;)t-=1;for(var n=this.raw(e,"semicolon"),r=0;r0&&"undefined"!==typeof e.raws.after)return(t=e.raws.after).includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}},{key:"rawBeforeOpen",value:function(e){var t;return e.walk((function(e){if("decl"!==e.type&&"undefined"!==typeof(t=e.raws.between))return!1})),t}},{key:"rawColon",value:function(e){var t;return e.walkDecls((function(e){if("undefined"!==typeof e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t}},{key:"beforeAfter",value:function(e,t){var n;n="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");for(var r=e.parent,i=0;r&&"root"!==r.type;)i+=1,r=r.parent;if(n.includes("\n")){var o=this.raw(e,null,"indent");if(o.length)for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:{},D=e.css.valueOf(),R=L.ignoreErrors,I=D.length,F=0,U=[],q=[];function z(){return F}function B(t){throw e.error("Unclosed "+t,F)}function H(){return 0===q.length&&F>=I}function V(e){if(q.length)return q.pop();if(!(F>=I)){var L=!!e&&e.ignoreUnclosed;switch(S=D.charCodeAt(F)){case o:case a:case l:case u:case s:E=F;do{E+=1,S=D.charCodeAt(E)}while(S===a||S===o||S===l||S===u||S===s);P=["space",D.slice(F,E)],F=E-1;break;case c:case f:case p:case m:case y:case v:case h:var z=String.fromCharCode(S);P=[z,z,F];break;case d:if(A=U.length?U.pop()[1]:"",j=D.charCodeAt(F+1),"url"===A&&j!==t&&j!==n&&j!==a&&j!==o&&j!==l&&j!==s&&j!==u){E=F;do{if(N=!1,-1===(E=D.indexOf(")",E+1))){if(R||L){E=F;break}B("bracket")}for(M=E;D.charCodeAt(M-1)===r;)M-=1,N=!N}while(N);P=["brackets",D.slice(F,E+1),F,E],F=E}else E=D.indexOf(")",F+1),C=D.slice(F,E+1),-1===E||_.test(C)?P=["(","(",F]:(P=["brackets",C,F,E],F=E);break;case t:case n:O=S===t?"'":'"',E=F;do{if(N=!1,-1===(E=D.indexOf(O,E+1))){if(R||L){E=F+1;break}B("string")}for(M=E;D.charCodeAt(M-1)===r;)M-=1,N=!N}while(N);P=["string",D.slice(F,E+1),F,E],F=E;break;case b:w.lastIndex=F+1,w.test(D),E=0===w.lastIndex?D.length-1:w.lastIndex-2,P=["at-word",D.slice(F,E+1),F,E],F=E;break;case r:for(E=F,T=!0;D.charCodeAt(E+1)===r;)E+=1,T=!T;if(S=D.charCodeAt(E+1),T&&S!==i&&S!==a&&S!==o&&S!==l&&S!==u&&S!==s&&(E+=1,k.test(D.charAt(E)))){for(;k.test(D.charAt(E+1));)E+=1;D.charCodeAt(E+1)===a&&(E+=1)}P=["word",D.slice(F,E+1),F,E],F=E;break;default:S===i&&D.charCodeAt(F+1)===g?(0===(E=D.indexOf("*/",F+2)+1)&&(R||L?E=D.length:B("comment")),P=["comment",D.slice(F,E+1),F,E],F=E):(x.lastIndex=F+1,x.test(D),E=0===x.lastIndex?D.length-1:x.lastIndex-2,P=["word",D.slice(F,E+1),F,E],U.push(P),F=E)}return F++,P}}function Y(e){q.push(e)}return{back:Y,nextToken:V,endOfFile:H,position:z}}},1653:function(e){"use strict";var t={};e.exports=function(e){t[e]||(t[e]=!0,"undefined"!==typeof console&&console.warn&&console.warn(e))}},2176:function(e,t,n){"use strict";var r=n(3937).default,i=n(1788).default,o=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r(this,e),this.type="warning",this.text=t,n.node&&n.node.source){var i=n.node.rangeBy(n);this.line=i.start.line,this.column=i.start.column,this.endLine=i.end.line,this.endColumn=i.end.column}for(var o in n)this[o]=n[o]}return i(e,[{key:"toString",value:function(){return this.node?this.node.error(this.text,{plugin:this.plugin,index:this.index,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}]),e}();e.exports=o,o.default=o},8453:function(e,t,n){"use strict";var r=n(7766);function i(){}function o(){}o.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,o,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:i};return n.PropTypes=n,n}},2719:function(e,t,n){e.exports=n(8453)()},7766:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},853:function(e,t,n){"use strict";var r=n(5423),i=n(9541);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n