diff --git a/.gitignore b/.gitignore
index 9b59c0a..5ed8cc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-SOURCES/grafana-7.5.15.tar.gz
-SOURCES/grafana-vendor-7.5.15-1.tar.xz
-SOURCES/grafana-webpack-7.5.15-1.tar.gz
+SOURCES/grafana-9.0.9.tar.gz
+SOURCES/grafana-vendor-9.0.9-1.tar.xz
+SOURCES/grafana-webpack-9.0.9-1.tar.gz
diff --git a/.grafana.metadata b/.grafana.metadata
index fceebe4..fb1fada 100644
--- a/.grafana.metadata
+++ b/.grafana.metadata
@@ -1,3 +1,3 @@
-292e451c457e936beb477bf5b4aec7b60f5a7d91 SOURCES/grafana-7.5.15.tar.gz
-c64c34383ec9209d4ac3645946e8c366efe847cc SOURCES/grafana-vendor-7.5.15-1.tar.xz
-2acb75f947ddd7b693da0356bdb4aebe8417146c SOURCES/grafana-webpack-7.5.15-1.tar.gz
+4676eecab36973d5b3cb7ba23b929364c91b7ed8 SOURCES/grafana-9.0.9.tar.gz
+7f0a2e8ac4431208b57781f849d6f5b79d339468 SOURCES/grafana-vendor-9.0.9-1.tar.xz
+08a5daeb99590879c606fb7e7badf7a80823990b SOURCES/grafana-webpack-9.0.9-1.tar.gz
diff --git a/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch b/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch
new file mode 100644
index 0000000..70ce0d5
--- /dev/null
+++ b/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch
@@ -0,0 +1,64 @@
+From 2ad9b1bd641eab2daae9c461656a56c8c2688485 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Wed, 22 Jun 2022 16:57:52 +0200
+Subject: [PATCH] update grafana-cli script with distro-specific paths and
+ switch to grafana user
+
+
+diff --git a/packaging/wrappers/grafana-cli b/packaging/wrappers/grafana-cli
+index dafa075a2c..eda358c425 100755
+--- a/packaging/wrappers/grafana-cli
++++ b/packaging/wrappers/grafana-cli
+@@ -5,18 +5,19 @@
+ # the system-wide Grafana configuration that was bundled with the package as we
+ # use the binary.
+ 
+-DEFAULT=/etc/default/grafana
++DEFAULT=/etc/sysconfig/grafana-server
+ 
+ GRAFANA_HOME=/usr/share/grafana
+ CONF_DIR=/etc/grafana
+ DATA_DIR=/var/lib/grafana
+ PLUGINS_DIR=/var/lib/grafana/plugins
+ LOG_DIR=/var/log/grafana
++LIBEXEC_DIR=/usr/libexec/grafana
+ 
+ CONF_FILE=$CONF_DIR/grafana.ini
+ PROVISIONING_CFG_DIR=$CONF_DIR/provisioning
+ 
+-EXECUTABLE=$GRAFANA_HOME/bin/grafana-cli
++EXECUTABLE=$LIBEXEC_DIR/grafana-cli
+ 
+ if [ ! -x $EXECUTABLE ]; then
+  echo "Program not installed or not executable"
+@@ -28,12 +29,21 @@ if [ -f "$DEFAULT" ]; then
+   . "$DEFAULT"
+ fi
+ 
+-OPTS="--homepath=${GRAFANA_HOME} \
+-      --config=${CONF_FILE} \
+-      --pluginsDir=${PLUGINS_DIR} \
+-      --configOverrides='cfg:default.paths.provisioning=$PROVISIONING_CFG_DIR \
+-                        cfg:default.paths.data=${DATA_DIR} \
+-                        cfg:default.paths.logs=${LOG_DIR} \
+-                        cfg:default.paths.plugins=${PLUGINS_DIR}'"
+-
+-eval $EXECUTABLE "$OPTS" '$@'
++OPTS=("--homepath=${GRAFANA_HOME}"
++      "--config=${CONF_FILE}"
++      "--pluginsDir=${PLUGINS_DIR}"
++      "--configOverrides=cfg:default.paths.provisioning=$PROVISIONING_CFG_DIR \
++                         cfg:default.paths.data=${DATA_DIR} \
++                         cfg:default.paths.logs=${LOG_DIR} \
++                         cfg:default.paths.plugins=${PLUGINS_DIR}")
++
++if [ "$(id -u)" -eq 0 ]; then
++  cd "${GRAFANA_HOME}"
++  exec runuser -u "${GRAFANA_USER}" -- "$EXECUTABLE" "${OPTS[@]}" "$@"
++elif [ "$(id -u -n)" = "${GRAFANA_USER}" ]; then
++  cd "${GRAFANA_HOME}"
++  exec "$EXECUTABLE" "${OPTS[@]}" "$@"
++else
++  echo "$0: please run this script as user \"${GRAFANA_USER}\" or root."
++  exit 5
++fi
diff --git a/SOURCES/0002-add-manpages.patch b/SOURCES/0002-add-manpages.patch
new file mode 100644
index 0000000..9200276
--- /dev/null
+++ b/SOURCES/0002-add-manpages.patch
@@ -0,0 +1,161 @@
+From ecac3e25a416bd66b19bc3074f9583dfd965a919 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Wed, 22 Jun 2022 17:01:09 +0200
+Subject: [PATCH] add manpages
+
+
+diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1
+new file mode 100644
+index 0000000000..39c0d5cee0
+--- /dev/null
++++ b/docs/man/man1/grafana-cli.1
+@@ -0,0 +1,63 @@
++.TH GRAFANA "1" "September 2022" "Grafana cli version 9.0.9" "User Commands"
++.SH NAME
++grafana-cli \- command line administration for the Grafana metrics dashboard and graph editor
++.SH DESCRIPTION
++.SS "NAME:"
++.IP
++grafana-cli
++.SS "USAGE:"
++.IP
++\fBgrafana\-cli\fP [\fIglobal options\fP] \fIcommand\fP [\fIcommand options\fP] [\fIarguments\fP...]
++.SS "COMMANDS:"
++.TP
++plugins
++Manage plugins for grafana
++.TP
++admin
++Grafana admin commands
++.TP
++cue
++Cue validation commands
++.TP
++help, h
++Shows a list of commands or help for one command
++.SS "GLOBAL OPTIONS:"
++.TP
++\fB\-\-pluginsDir\fR value
++path to the grafana plugin directory (default: "/var/lib/grafana/plugins") [$GF_PLUGIN_DIR]
++.TP
++\fB\-\-repo\fR value
++url to the plugin repository (default: "https://grafana.com/api/plugins") [$GF_PLUGIN_REPO]
++.TP
++\fB\-\-pluginUrl\fR value
++Full url to the plugin zip file instead of downloading the plugin from grafana.com/api [$GF_PLUGIN_URL]
++.TP
++\fB\-\-insecure\fR
++Skip TLS verification (insecure) (default: false)
++.TP
++\fB\-\-debug\fR
++Enable debug logging (default: false)
++.TP
++\fB\-\-configOverrides\fR value
++Configuration options to override defaults as a string. e.g. cfg:default.paths.log=/dev/null
++.TP
++\fB\-\-homepath\fR value
++Path to Grafana install/home path, defaults to working directory
++.TP
++\fB\-\-config\fR value
++Path to config file
++.TP
++\fB\-\-help\fR, \fB\-h\fR
++show help
++.TP
++\fB\-\-version\fR, \fB\-v\fR
++print the version
++.SH "SEE ALSO"
++Additional documentation for
++.B grafana-cli
++is available on-line at
++.BR http://docs.grafana.org/administration/cli/ .
++The full documentation for
++.B Grafana
++is available on-line at
++.BR http://docs.grafana.org/ .
+diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1
+new file mode 100644
+index 0000000000..683a2369cc
+--- /dev/null
++++ b/docs/man/man1/grafana-server.1
+@@ -0,0 +1,80 @@
++.TH VERSION "1" "September 2022" "Version 9.0.9" "User Commands"
++.SH NAME
++grafana-server \- back-end server for the Grafana metrics dashboard and graph editor
++.SH DESCRIPTION
++.B grafana-server
++is the back-end server for the Grafana metrics dashboard and graph editor.
++The
++.B grafana-server
++program should not normally be run from the command line,
++except when testing or for development purposes.
++Rather it should be managed by
++.BR systemd .
++After installing Grafana, the systemd service should be enabled and started as follows:
++.P
++.in 1i
++.B systemctl daemon-reload
++.br
++.B systemctl enable grafana-server.service
++.br
++.B systemctl start grafana-server.service
++.in
++.P
++.SH OPTIONS
++The
++.B grafana-server
++configuration is specified in
++.BR /etc/grafana/grafana.ini
++and is well documented with comments.
++The command-line options listed below override options of
++the same (or similar) name in the configuration file.
++.P
++.HP
++\fB\-config\fR string
++.IP
++path to config file
++.HP
++\fB\-homepath\fR string
++.IP
++path to grafana install/home path, defaults to working directory
++.HP
++\fB\-packaging\fR string
++.IP
++describes the way Grafana was installed (default "unknown")
++.HP
++\fB\-pidfile\fR string
++.IP
++path to pid file
++.HP
++\fB\-profile\fR
++.IP
++Turn on pprof profiling
++.HP
++\fB\-profile\-addr\fR string
++.IP
++Define custom address for profiling (default "localhost")
++.HP
++\fB\-profile\-port\fR uint
++.IP
++Define custom port for profiling (default 6060)
++.HP
++\fB\-tracing\fR
++.IP
++Turn on tracing
++.HP
++\fB\-tracing\-file\fR string
++.IP
++Define tracing output file (default "trace.out")
++.TP
++\fB\-v\fR
++.IP
++prints current version and exits
++.TP
++\fB\-vv\fR
++.IP
++prints current version, all dependencies and exits
++.SH "SEE ALSO"
++The full documentation for
++.B Grafana
++is available on-line at
++.BR http://docs.grafana.org/ .
diff --git a/SOURCES/0003-update-default-configuration.patch b/SOURCES/0003-update-default-configuration.patch
new file mode 100644
index 0000000..6ef6de4
--- /dev/null
+++ b/SOURCES/0003-update-default-configuration.patch
@@ -0,0 +1,68 @@
+From a84194c2f7929bd78303daf04a56ab32cd9c4bb3 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Wed, 22 Jun 2022 17:05:48 +0200
+Subject: [PATCH] update default configuration
+
+
+diff --git a/conf/defaults.ini b/conf/defaults.ini
+index dbb7143be4..4a3cf0a21d 100644
+--- a/conf/defaults.ini
++++ b/conf/defaults.ini
+@@ -190,7 +190,7 @@ row_limit = 1000000
+ # No ip addresses are being tracked, only simple counters to track
+ # running instances, dashboard and error counts. It is very helpful to us.
+ # Change this option to false to disable reporting.
+-reporting_enabled = true
++reporting_enabled = false
+ 
+ # The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs
+ reporting_distributor = grafana-labs
+@@ -200,7 +200,7 @@ reporting_distributor = grafana-labs
+ # in some UI views to notify that a grafana update exists.
+ # This option does not cause any auto updates, nor send any information
+ # only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version.
+-check_for_updates = true
++check_for_updates = false
+ 
+ # Set to false to disable all checks to https://grafana.com
+ # for new versions of plugins. The check is used
+diff --git a/conf/sample.ini b/conf/sample.ini
+index d44532f346..1ede932e1e 100644
+--- a/conf/sample.ini
++++ b/conf/sample.ini
+@@ -196,7 +196,7 @@
+ # No ip addresses are being tracked, only simple counters to track
+ # running instances, dashboard and error counts. It is very helpful to us.
+ # Change this option to false to disable reporting.
+-;reporting_enabled = true
++;reporting_enabled = false
+ 
+ # The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs
+ ;reporting_distributor = grafana-labs
+@@ -206,7 +206,7 @@
+ # in some UI views to notify that a grafana update exists.
+ # This option does not cause any auto updates, nor send any information
+ # only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version.
+-;check_for_updates = true
++;check_for_updates = false
+ 
+ # Set to false to disable all checks to https://grafana.com
+ # for new versions of plugins. The check is used
+@@ -338,7 +338,7 @@
+ 
+ # Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
+ # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
+-;min_refresh_interval = 5s
++min_refresh_interval = 1s
+ 
+ # Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
+ ;default_home_dashboard_path =
+@@ -1028,7 +1028,7 @@
+ ;enable_alpha = false
+ ;app_tls_skip_verify_insecure = false
+ # Enter a comma-separated list of plugin identifiers to identify plugins to load even if they are unsigned. Plugins with modified signatures are never loaded.
+-;allow_loading_unsigned_plugins =
++allow_loading_unsigned_plugins = performancecopilot-pcp-app,pcp-redis-datasource,pcp-vector-datasource,pcp-bpftrace-datasource,pcp-flamegraph-panel,pcp-breadcrumbs-panel,pcp-troubleshooting-panel,performancecopilot-redis-datasource,performancecopilot-vector-datasource,performancecopilot-bpftrace-datasource,performancecopilot-flamegraph-panel,performancecopilot-breadcrumbs-panel,performancecopilot-troubleshooting-panel
+ # Enable or disable installing / uninstalling / updating plugins directly from within Grafana.
+ ;plugin_admin_enabled = false
+ ;plugin_admin_external_manage_enabled = false
diff --git a/SOURCES/0004-remove-unused-backend-dependencies.patch b/SOURCES/0004-remove-unused-backend-dependencies.patch
new file mode 100644
index 0000000..977ce5b
--- /dev/null
+++ b/SOURCES/0004-remove-unused-backend-dependencies.patch
@@ -0,0 +1,143 @@
+From 7139240c52b69fde8b893bf73fb6a4910d65f30b Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Wed, 22 Jun 2022 17:18:56 +0200
+Subject: [PATCH] remove unused backend dependencies
+
+saml and gofpdf are not used in the OSS edition of Grafana
+after editing `pkg/extensions/main.go`, run `go mod tidy`
+
+diff --git a/go.mod b/go.mod
+index 951745c95f..5b1379fa98 100644
+--- a/go.mod
++++ b/go.mod
+@@ -27,7 +27,6 @@ require (
+ 	github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
+ 	github.com/centrifugal/centrifuge v0.19.0
+ 	github.com/cortexproject/cortex v1.10.1-0.20211014125347-85c378182d0d
+-	github.com/crewjam/saml v0.4.6-0.20210521115923-29c6295245bd
+ 	github.com/davecgh/go-spew v1.1.1
+ 	github.com/denisenkom/go-mssqldb v0.12.0
+ 	github.com/dop251/goja v0.0.0-20210804101310-32956a348b49
+@@ -63,7 +62,6 @@ require (
+ 	github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097
+ 	github.com/jmespath/go-jmespath v0.4.0
+ 	github.com/json-iterator/go v1.1.12
+-	github.com/jung-kurt/gofpdf v1.16.2
+ 	github.com/lib/pq v1.10.4
+ 	github.com/linkedin/goavro/v2 v2.10.0
+ 	github.com/m3db/prometheus_remote_client_golang v0.4.4
+@@ -191,7 +189,6 @@ require (
+ 	github.com/josharian/intern v1.0.0 // indirect
+ 	github.com/jpillora/backoff v1.0.0 // indirect
+ 	github.com/mailru/easyjson v0.7.7 // indirect
+-	github.com/mattermost/xml-roundtrip-validator v0.1.0 // indirect
+ 	github.com/mattetti/filebuffer v1.0.1 // indirect
+ 	github.com/mattn/go-runewidth v0.0.9 // indirect
+ 	github.com/miekg/dns v1.1.43 // indirect
+diff --git a/go.sum b/go.sum
+index 0f2ad00d37..19e3489ca1 100644
+--- a/go.sum
++++ b/go.sum
+@@ -740,7 +740,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
+ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+ github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+-github.com/crewjam/httperr v0.2.0/go.mod h1:Jlz+Sg/XqBQhyMjdDiC+GNNRzZTD7x39Gu3pglZ5oH4=
+ github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ=
+ github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA=
+ github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
+@@ -766,7 +765,6 @@ github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2
+ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+-github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4=
+ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M=
+ github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU=
+ github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw=
+@@ -923,7 +921,6 @@ github.com/fluent/fluent-bit-go v0.0.0-20190925192703-ea13c021720c/go.mod h1:WQX
+ github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+ github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+-github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
+ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+ github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
+ github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo=
+@@ -1459,8 +1456,6 @@ github.com/grafana/grafana-plugin-sdk-go v0.138.0 h1:uJWNwHL4RoQF3axoi3RDSwoNu/K
+ github.com/grafana/grafana-plugin-sdk-go v0.138.0/go.mod h1:Y+Ps2sesZ62AyCnX+hzrYnyDQYe/ZZl+A8yKLOBm12c=
+ github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa h1:+pXjAxavVR2FKKNsuuCXGCWEj8XGc1Af6SPiyBpzU2A=
+ github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa/go.mod h1:0O8o/juxNSKN/e+DzWDTRkl7Zm8CkZcz0NDqEdojlrk=
+-github.com/grafana/saml v0.0.0-20211007135653-aed1b2edd86b h1:YiSGp34F4V0G08HHx1cJBf2GVgwYAkXQjzuVs1t8jYk=
+-github.com/grafana/saml v0.0.0-20211007135653-aed1b2edd86b/go.mod h1:q83kyQoMD0vhy+RzFLlbw0UgHJ6TAihQpuXvdFmm4s4=
+ github.com/grafana/sqlds/v2 v2.3.7/go.mod h1:c6ibxnxRVGxV/0YkEgvy7QpQH/lyifFyV7K/14xvdIs=
+ github.com/grafana/thema v0.0.0-20220523183731-72aebd14e751 h1:5PpsfN52XA0hxOjD/qQ0QNiEkp9Y9Tb+yz/Hj9fyL4M=
+ github.com/grafana/thema v0.0.0-20220523183731-72aebd14e751/go.mod h1:KuqTKX9lfM87uu9vt9DS/q+REqSrAm2xYMnBBvlmevA=
+@@ -1766,7 +1761,6 @@ github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52Cu
+ github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak=
+ github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
+ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+-github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+ github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
+ github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+ github.com/joncrlsn/dque v2.2.1-0.20200515025108-956d14155fa2+incompatible/go.mod h1:hDZb8oMj3Kp8MxtbNLg9vrtAUDHjgI1yZvqivT4O8Iw=
+@@ -1801,8 +1795,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
+ github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+ github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
+ github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
+-github.com/jung-kurt/gofpdf v1.16.2 h1:jgbatWHfRlPYiK85qgevsZTHviWXKwB1TTiKdz5PtRc=
+-github.com/jung-kurt/gofpdf v1.16.2/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0=
+ github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
+ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
+ github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo=
+@@ -1930,8 +1922,6 @@ github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHef
+ github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
+ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
+ github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
+-github.com/mattermost/xml-roundtrip-validator v0.1.0 h1:RXbVD2UAl7A7nOTR4u7E3ILa4IbtvKBHw64LDsmu9hU=
+-github.com/mattermost/xml-roundtrip-validator v0.1.0/go.mod h1:qccnGMcpgwcNaBnxqpJpWWUiPNr5H3O8eDgGV9gT5To=
+ github.com/mattetti/filebuffer v1.0.1 h1:gG7pyfnSIZCxdoKq+cPa8T0hhYtD9NxCdI4D7PTjRLM=
+ github.com/mattetti/filebuffer v1.0.1/go.mod h1:YdMURNDOttIiruleeVr6f56OrMc+MydEnTcXwtkxNVs=
+ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+@@ -2239,7 +2229,6 @@ github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHu
+ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
+ github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
+ github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
+-github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+ github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+ github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
+@@ -2433,7 +2422,6 @@ github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
+ github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
+ github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
+ github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
+-github.com/russellhaering/goxmldsig v1.1.0/go.mod h1:QK8GhXPB3+AfuCrfo0oRISa9NfzeCpWmxeGnqEpDF9o=
+ github.com/russellhaering/goxmldsig v1.1.1 h1:vI0r2osGF1A9PLvsGdPUAGwEIrKa4Pj5sesSBsebIxM=
+ github.com/russellhaering/goxmldsig v1.1.1/go.mod h1:gM4MDENBQf7M+V824SGfyIUVFWydB7n0KkEubVJl+Tw=
+ github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
+@@ -2747,7 +2735,6 @@ github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX
+ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
+ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
+ github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
+-github.com/zenazn/goji v1.0.1/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
+ github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
+ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
+ gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE=
+diff --git a/pkg/extensions/main.go b/pkg/extensions/main.go
+index adcaff8ca6..c3110f590e 100644
+--- a/pkg/extensions/main.go
++++ b/pkg/extensions/main.go
+@@ -9,7 +9,6 @@ import (
+ 	_ "github.com/Azure/go-autorest/autorest/adal"
+ 	_ "github.com/beevik/etree"
+ 	_ "github.com/cortexproject/cortex/pkg/util"
+-	_ "github.com/crewjam/saml"
+ 	_ "github.com/gobwas/glob"
+ 	_ "github.com/googleapis/gax-go/v2"
+ 	_ "github.com/grafana/dskit/backoff"
+@@ -17,7 +16,6 @@ import (
+ 	_ "github.com/grafana/loki/clients/pkg/promtail/client"
+ 	_ "github.com/grafana/loki/pkg/logproto"
+ 	_ "github.com/grpc-ecosystem/go-grpc-middleware"
+-	_ "github.com/jung-kurt/gofpdf"
+ 	_ "github.com/linkedin/goavro/v2"
+ 	_ "github.com/m3db/prometheus_remote_client_golang/promremote"
+ 	_ "github.com/pkg/errors"
diff --git a/SOURCES/0005-remove-unused-frontend-crypto.patch b/SOURCES/0005-remove-unused-frontend-crypto.patch
new file mode 100644
index 0000000..b44ca4a
--- /dev/null
+++ b/SOURCES/0005-remove-unused-frontend-crypto.patch
@@ -0,0 +1,877 @@
+From 0ee0768a196ba12b860b4a0920f729d5ce50ea3e Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Wed, 22 Jun 2022 17:36:47 +0200
+Subject: [PATCH] remove unused frontend crypto
+
+update `package.json` and then run `yarn install` to update the
+`yarn.lock` lockfile
+
+diff --git a/package.json b/package.json
+index 5e2875090b..137a307f14 100644
+--- a/package.json
++++ b/package.json
+@@ -396,6 +396,9 @@
+     "whatwg-fetch": "3.6.2"
+   },
+   "resolutions": {
++    "crypto-browserify": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz",
++    "selfsigned": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz",
++    "http-signature": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz",
+     "underscore": "1.13.3",
+     "@types/slate": "0.47.9",
+     "@microsoft/api-extractor-model": "7.17.3",
+diff --git a/yarn.lock b/yarn.lock
+index 8132e0f942..b41c0efb1b 100644
+--- a/yarn.lock
++++ b/yarn.lock
+@@ -12256,34 +12256,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"asn1.js@npm:^5.2.0":
+-  version: 5.4.1
+-  resolution: "asn1.js@npm:5.4.1"
+-  dependencies:
+-    bn.js: ^4.0.0
+-    inherits: ^2.0.1
+-    minimalistic-assert: ^1.0.0
+-    safer-buffer: ^2.1.0
+-  checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a
+-  languageName: node
+-  linkType: hard
+-
+-"asn1@npm:~0.2.3":
+-  version: 0.2.4
+-  resolution: "asn1@npm:0.2.4"
+-  dependencies:
+-    safer-buffer: ~2.1.0
+-  checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c
+-  languageName: node
+-  linkType: hard
+-
+-"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0":
+-  version: 1.0.0
+-  resolution: "assert-plus@npm:1.0.0"
+-  checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64
+-  languageName: node
+-  linkType: hard
+-
+ "assert@npm:2.0.0":
+   version: 2.0.0
+   resolution: "assert@npm:2.0.0"
+@@ -12870,15 +12842,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"bcrypt-pbkdf@npm:^1.0.0":
+-  version: 1.0.2
+-  resolution: "bcrypt-pbkdf@npm:1.0.2"
+-  dependencies:
+-    tweetnacl: ^0.14.3
+-  checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291
+-  languageName: node
+-  linkType: hard
+-
+ "before-after-hook@npm:^2.2.0":
+   version: 2.2.2
+   resolution: "before-after-hook@npm:2.2.2"
+@@ -12970,20 +12933,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9":
+-  version: 4.12.0
+-  resolution: "bn.js@npm:4.12.0"
+-  checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12
+-  languageName: node
+-  linkType: hard
+-
+-"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1":
+-  version: 5.2.0
+-  resolution: "bn.js@npm:5.2.0"
+-  checksum: 6117170393200f68b35a061ecbf55d01dd989302e7b3c798a3012354fa638d124f0b2f79e63f77be5556be80322a09c40339eda6413ba7468524c0b6d4b4cb7a
+-  languageName: node
+-  linkType: hard
+-
+ "body-parser@npm:1.19.0":
+   version: 1.19.0
+   resolution: "body-parser@npm:1.19.0"
+@@ -13108,13 +13057,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"brorand@npm:^1.0.1, brorand@npm:^1.1.0":
+-  version: 1.1.0
+-  resolution: "brorand@npm:1.1.0"
+-  checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be
+-  languageName: node
+-  linkType: hard
+-
+ "browser-process-hrtime@npm:^1.0.0":
+   version: 1.0.0
+   resolution: "browser-process-hrtime@npm:1.0.0"
+@@ -13129,70 +13071,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4":
+-  version: 1.2.0
+-  resolution: "browserify-aes@npm:1.2.0"
+-  dependencies:
+-    buffer-xor: ^1.0.3
+-    cipher-base: ^1.0.0
+-    create-hash: ^1.1.0
+-    evp_bytestokey: ^1.0.3
+-    inherits: ^2.0.1
+-    safe-buffer: ^5.0.1
+-  checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104
+-  languageName: node
+-  linkType: hard
+-
+-"browserify-cipher@npm:^1.0.0":
+-  version: 1.0.1
+-  resolution: "browserify-cipher@npm:1.0.1"
+-  dependencies:
+-    browserify-aes: ^1.0.4
+-    browserify-des: ^1.0.0
+-    evp_bytestokey: ^1.0.0
+-  checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13
+-  languageName: node
+-  linkType: hard
+-
+-"browserify-des@npm:^1.0.0":
+-  version: 1.0.2
+-  resolution: "browserify-des@npm:1.0.2"
+-  dependencies:
+-    cipher-base: ^1.0.1
+-    des.js: ^1.0.0
+-    inherits: ^2.0.1
+-    safe-buffer: ^5.1.2
+-  checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7
+-  languageName: node
+-  linkType: hard
+-
+-"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1":
+-  version: 4.1.0
+-  resolution: "browserify-rsa@npm:4.1.0"
+-  dependencies:
+-    bn.js: ^5.0.0
+-    randombytes: ^2.0.1
+-  checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54
+-  languageName: node
+-  linkType: hard
+-
+-"browserify-sign@npm:^4.0.0":
+-  version: 4.2.1
+-  resolution: "browserify-sign@npm:4.2.1"
+-  dependencies:
+-    bn.js: ^5.1.1
+-    browserify-rsa: ^4.0.1
+-    create-hash: ^1.2.0
+-    create-hmac: ^1.1.7
+-    elliptic: ^6.5.3
+-    inherits: ^2.0.4
+-    parse-asn1: ^5.1.5
+-    readable-stream: ^3.6.0
+-    safe-buffer: ^5.2.0
+-  checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707
+-  languageName: node
+-  linkType: hard
+-
+ "browserify-zlib@npm:^0.2.0":
+   version: 0.2.0
+   resolution: "browserify-zlib@npm:0.2.0"
+@@ -13294,13 +13172,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"buffer-xor@npm:^1.0.3":
+-  version: 1.0.3
+-  resolution: "buffer-xor@npm:1.0.3"
+-  checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a
+-  languageName: node
+-  linkType: hard
+-
+ "buffer@npm:^4.3.0":
+   version: 4.9.2
+   resolution: "buffer@npm:4.9.2"
+@@ -13896,16 +13767,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3":
+-  version: 1.0.4
+-  resolution: "cipher-base@npm:1.0.4"
+-  dependencies:
+-    inherits: ^2.0.1
+-    safe-buffer: ^5.0.1
+-  checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e
+-  languageName: node
+-  linkType: hard
+-
+ "cjs-module-lexer@npm:^1.0.0":
+   version: 1.2.2
+   resolution: "cjs-module-lexer@npm:1.2.2"
+@@ -14806,13 +14667,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"core-util-is@npm:1.0.2":
+-  version: 1.0.2
+-  resolution: "core-util-is@npm:1.0.2"
+-  checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab
+-  languageName: node
+-  linkType: hard
+-
+ "core-util-is@npm:~1.0.0":
+   version: 1.0.3
+   resolution: "core-util-is@npm:1.0.3"
+@@ -14882,16 +14736,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"create-ecdh@npm:^4.0.0":
+-  version: 4.0.4
+-  resolution: "create-ecdh@npm:4.0.4"
+-  dependencies:
+-    bn.js: ^4.1.0
+-    elliptic: ^6.5.3
+-  checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b
+-  languageName: node
+-  linkType: hard
+-
+ "create-emotion@npm:^10.0.14, create-emotion@npm:^10.0.27":
+   version: 10.0.27
+   resolution: "create-emotion@npm:10.0.27"
+@@ -14904,33 +14748,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0":
+-  version: 1.2.0
+-  resolution: "create-hash@npm:1.2.0"
+-  dependencies:
+-    cipher-base: ^1.0.1
+-    inherits: ^2.0.1
+-    md5.js: ^1.3.4
+-    ripemd160: ^2.0.1
+-    sha.js: ^2.4.0
+-  checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9
+-  languageName: node
+-  linkType: hard
+-
+-"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7":
+-  version: 1.1.7
+-  resolution: "create-hmac@npm:1.1.7"
+-  dependencies:
+-    cipher-base: ^1.0.3
+-    create-hash: ^1.1.0
+-    inherits: ^2.0.1
+-    ripemd160: ^2.0.0
+-    safe-buffer: ^5.0.1
+-    sha.js: ^2.4.8
+-  checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed
+-  languageName: node
+-  linkType: hard
+-
+ "create-require@npm:^1.1.0":
+   version: 1.1.1
+   resolution: "create-require@npm:1.1.1"
+@@ -14962,22 +14779,10 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"crypto-browserify@npm:^3.11.0":
+-  version: 3.12.0
+-  resolution: "crypto-browserify@npm:3.12.0"
+-  dependencies:
+-    browserify-cipher: ^1.0.0
+-    browserify-sign: ^4.0.0
+-    create-ecdh: ^4.0.0
+-    create-hash: ^1.1.0
+-    create-hmac: ^1.1.0
+-    diffie-hellman: ^5.0.0
+-    inherits: ^2.0.1
+-    pbkdf2: ^3.0.3
+-    public-encrypt: ^4.0.0
+-    randombytes: ^2.0.0
+-    randomfill: ^1.0.3
+-  checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2
++"crypto-browserify@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz":
++  version: 1.1.3
++  resolution: "crypto-browserify@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz"
++  checksum: e233cb660c0eac1172e3c4da249aeaae92b222e9b870d64a427c7212833a1634e56e2f7601989b1a6a6cd0e8841ff3776cd18f8b56dfc20257b893987d624920
+   languageName: node
+   linkType: hard
+ 
+@@ -15928,15 +15733,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"dashdash@npm:^1.12.0":
+-  version: 1.14.1
+-  resolution: "dashdash@npm:1.14.1"
+-  dependencies:
+-    assert-plus: ^1.0.0
+-  checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598
+-  languageName: node
+-  linkType: hard
+-
+ "data-urls@npm:^2.0.0":
+   version: 2.0.0
+   resolution: "data-urls@npm:2.0.0"
+@@ -16251,16 +16047,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"des.js@npm:^1.0.0":
+-  version: 1.0.1
+-  resolution: "des.js@npm:1.0.1"
+-  dependencies:
+-    inherits: ^2.0.1
+-    minimalistic-assert: ^1.0.0
+-  checksum: 1ec2eedd7ed6bd61dd5e0519fd4c96124e93bb22de8a9d211b02d63e5dd152824853d919bb2090f965cc0e3eb9c515950a9836b332020d810f9c71feb0fd7df4
+-  languageName: node
+-  linkType: hard
+-
+ "destroy@npm:~1.0.4":
+   version: 1.0.4
+   resolution: "destroy@npm:1.0.4"
+@@ -16397,17 +16183,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"diffie-hellman@npm:^5.0.0":
+-  version: 5.0.3
+-  resolution: "diffie-hellman@npm:5.0.3"
+-  dependencies:
+-    bn.js: ^4.1.0
+-    miller-rabin: ^4.0.0
+-    randombytes: ^2.0.0
+-  checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065
+-  languageName: node
+-  linkType: hard
+-
+ "dir-glob@npm:^2.2.2":
+   version: 2.2.2
+   resolution: "dir-glob@npm:2.2.2"
+@@ -16694,16 +16469,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"ecc-jsbn@npm:~0.1.1":
+-  version: 0.1.2
+-  resolution: "ecc-jsbn@npm:0.1.2"
+-  dependencies:
+-    jsbn: ~0.1.0
+-    safer-buffer: ^2.1.0
+-  checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a
+-  languageName: node
+-  linkType: hard
+-
+ "ee-first@npm:1.1.1":
+   version: 1.1.1
+   resolution: "ee-first@npm:1.1.1"
+@@ -16748,21 +16513,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"elliptic@npm:^6.5.3":
+-  version: 6.5.4
+-  resolution: "elliptic@npm:6.5.4"
+-  dependencies:
+-    bn.js: ^4.11.9
+-    brorand: ^1.1.0
+-    hash.js: ^1.0.0
+-    hmac-drbg: ^1.0.1
+-    inherits: ^2.0.4
+-    minimalistic-assert: ^1.0.1
+-    minimalistic-crypto-utils: ^1.0.1
+-  checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4
+-  languageName: node
+-  linkType: hard
+-
+ "emitter-component@npm:^1.1.1":
+   version: 1.1.1
+   resolution: "emitter-component@npm:1.1.1"
+@@ -17716,17 +17466,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3":
+-  version: 1.0.3
+-  resolution: "evp_bytestokey@npm:1.0.3"
+-  dependencies:
+-    md5.js: ^1.3.4
+-    node-gyp: latest
+-    safe-buffer: ^5.1.1
+-  checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45
+-  languageName: node
+-  linkType: hard
+-
+ "exec-sh@npm:^0.3.2":
+   version: 0.3.6
+   resolution: "exec-sh@npm:0.3.6"
+@@ -18006,20 +17745,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"extsprintf@npm:1.3.0":
+-  version: 1.3.0
+-  resolution: "extsprintf@npm:1.3.0"
+-  checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2
+-  languageName: node
+-  linkType: hard
+-
+-"extsprintf@npm:^1.2.0":
+-  version: 1.4.0
+-  resolution: "extsprintf@npm:1.4.0"
+-  checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e
+-  languageName: node
+-  linkType: hard
+-
+ "fast-deep-equal@npm:^3.0.0, fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+   version: 3.1.3
+   resolution: "fast-deep-equal@npm:3.1.3"
+@@ -19046,15 +18771,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"getpass@npm:^0.1.1":
+-  version: 0.1.7
+-  resolution: "getpass@npm:0.1.7"
+-  dependencies:
+-    assert-plus: ^1.0.0
+-  checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046
+-  languageName: node
+-  linkType: hard
+-
+ "git-raw-commits@npm:^2.0.8":
+   version: 2.0.10
+   resolution: "git-raw-commits@npm:2.0.10"
+@@ -19887,27 +19603,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"hash-base@npm:^3.0.0":
+-  version: 3.1.0
+-  resolution: "hash-base@npm:3.1.0"
+-  dependencies:
+-    inherits: ^2.0.4
+-    readable-stream: ^3.6.0
+-    safe-buffer: ^5.2.0
+-  checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc
+-  languageName: node
+-  linkType: hard
+-
+-"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3":
+-  version: 1.1.7
+-  resolution: "hash.js@npm:1.1.7"
+-  dependencies:
+-    inherits: ^2.0.3
+-    minimalistic-assert: ^1.0.1
+-  checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f
+-  languageName: node
+-  linkType: hard
+-
+ "hast-to-hyperscript@npm:^9.0.0":
+   version: 9.0.1
+   resolution: "hast-to-hyperscript@npm:9.0.1"
+@@ -20043,17 +19738,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"hmac-drbg@npm:^1.0.1":
+-  version: 1.0.1
+-  resolution: "hmac-drbg@npm:1.0.1"
+-  dependencies:
+-    hash.js: ^1.0.3
+-    minimalistic-assert: ^1.0.0
+-    minimalistic-crypto-utils: ^1.0.1
+-  checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0
+-  languageName: node
+-  linkType: hard
+-
+ "hoist-non-react-statics@npm:3.3.2, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2":
+   version: 3.3.2
+   resolution: "hoist-non-react-statics@npm:3.3.2"
+@@ -20394,25 +20078,10 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"http-signature@npm:~1.2.0":
+-  version: 1.2.0
+-  resolution: "http-signature@npm:1.2.0"
+-  dependencies:
+-    assert-plus: ^1.0.0
+-    jsprim: ^1.2.2
+-    sshpk: ^1.7.0
+-  checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c
+-  languageName: node
+-  linkType: hard
+-
+-"http-signature@npm:~1.3.6":
+-  version: 1.3.6
+-  resolution: "http-signature@npm:1.3.6"
+-  dependencies:
+-    assert-plus: ^1.0.0
+-    jsprim: ^2.0.2
+-    sshpk: ^1.14.1
+-  checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c
++"http-signature@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz":
++  version: 1.1.3
++  resolution: "http-signature@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz"
++  checksum: 78b64605540e2d25bede2d74ec9e7740ab9a466c9a562ae3a8ccc7e07e26e601a013859c94adf890679403cd337b9690f598d64bc4fbc1d2eaa2f27241ca08a1
+   languageName: node
+   linkType: hard
+ 
+@@ -22562,13 +22231,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"jsbn@npm:~0.1.0":
+-  version: 0.1.1
+-  resolution: "jsbn@npm:0.1.1"
+-  checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2
+-  languageName: node
+-  linkType: hard
+-
+ "jsdoc-type-pratt-parser@npm:~2.2.5":
+   version: 2.2.5
+   resolution: "jsdoc-type-pratt-parser@npm:2.2.5"
+@@ -22683,13 +22345,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"json-schema@npm:0.2.3, json-schema@npm:0.4.0":
+-  version: 0.4.0
+-  resolution: "json-schema@npm:0.4.0"
+-  checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72
+-  languageName: node
+-  linkType: hard
+-
+ "json-source-map@npm:0.6.1":
+   version: 0.6.1
+   resolution: "json-source-map@npm:0.6.1"
+@@ -22793,30 +22448,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"jsprim@npm:^1.2.2":
+-  version: 1.4.1
+-  resolution: "jsprim@npm:1.4.1"
+-  dependencies:
+-    assert-plus: 1.0.0
+-    extsprintf: 1.3.0
+-    json-schema: 0.2.3
+-    verror: 1.10.0
+-  checksum: 6bcb20ec265ae18bb48e540a6da2c65f9c844f7522712d6dfcb01039527a49414816f4869000493363f1e1ea96cbad00e46188d5ecc78257a19f152467587373
+-  languageName: node
+-  linkType: hard
+-
+-"jsprim@npm:^2.0.2":
+-  version: 2.0.2
+-  resolution: "jsprim@npm:2.0.2"
+-  dependencies:
+-    assert-plus: 1.0.0
+-    extsprintf: 1.3.0
+-    json-schema: 0.4.0
+-    verror: 1.10.0
+-  checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838
+-  languageName: node
+-  linkType: hard
+-
+ "jsurl@npm:^0.1.5":
+   version: 0.1.5
+   resolution: "jsurl@npm:0.1.5"
+@@ -23818,17 +23449,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"md5.js@npm:^1.3.4":
+-  version: 1.3.5
+-  resolution: "md5.js@npm:1.3.5"
+-  dependencies:
+-    hash-base: ^3.0.0
+-    inherits: ^2.0.1
+-    safe-buffer: ^5.1.2
+-  checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c
+-  languageName: node
+-  linkType: hard
+-
+ "mdast-squeeze-paragraphs@npm:^4.0.0":
+   version: 4.0.0
+   resolution: "mdast-squeeze-paragraphs@npm:4.0.0"
+@@ -24108,18 +23728,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"miller-rabin@npm:^4.0.0":
+-  version: 4.0.1
+-  resolution: "miller-rabin@npm:4.0.1"
+-  dependencies:
+-    bn.js: ^4.0.0
+-    brorand: ^1.0.1
+-  bin:
+-    miller-rabin: bin/miller-rabin
+-  checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece
+-  languageName: node
+-  linkType: hard
+-
+ "mime-db@npm:1.50.0, mime-db@npm:>= 1.43.0 < 2":
+   version: 1.50.0
+   resolution: "mime-db@npm:1.50.0"
+@@ -24247,20 +23855,13 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1":
++"minimalistic-assert@npm:^1.0.0":
+   version: 1.0.1
+   resolution: "minimalistic-assert@npm:1.0.1"
+   checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7
+   languageName: node
+   linkType: hard
+ 
+-"minimalistic-crypto-utils@npm:^1.0.1":
+-  version: 1.0.1
+-  resolution: "minimalistic-crypto-utils@npm:1.0.1"
+-  checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed
+-  languageName: node
+-  linkType: hard
+-
+ "minimatch@npm:3.0.4, minimatch@npm:^3.0.4":
+   version: 3.0.4
+   resolution: "minimatch@npm:3.0.4"
+@@ -24903,13 +24504,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"node-forge@npm:^1":
+-  version: 1.3.1
+-  resolution: "node-forge@npm:1.3.1"
+-  checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9
+-  languageName: node
+-  linkType: hard
+-
+ "node-gettext@npm:^3.0.0":
+   version: 3.0.0
+   resolution: "node-gettext@npm:3.0.0"
+@@ -26024,19 +25618,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5":
+-  version: 5.1.6
+-  resolution: "parse-asn1@npm:5.1.6"
+-  dependencies:
+-    asn1.js: ^5.2.0
+-    browserify-aes: ^1.0.0
+-    evp_bytestokey: ^1.0.0
+-    pbkdf2: ^3.0.3
+-    safe-buffer: ^5.1.1
+-  checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7
+-  languageName: node
+-  linkType: hard
+-
+ "parse-entities@npm:^2.0.0":
+   version: 2.0.0
+   resolution: "parse-entities@npm:2.0.0"
+@@ -26258,19 +25839,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"pbkdf2@npm:^3.0.3":
+-  version: 3.1.2
+-  resolution: "pbkdf2@npm:3.1.2"
+-  dependencies:
+-    create-hash: ^1.1.2
+-    create-hmac: ^1.1.4
+-    ripemd160: ^2.0.1
+-    safe-buffer: ^5.0.1
+-    sha.js: ^2.4.8
+-  checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92
+-  languageName: node
+-  linkType: hard
+-
+ "pend@npm:~1.2.0":
+   version: 1.2.0
+   resolution: "pend@npm:1.2.0"
+@@ -27959,20 +27527,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"public-encrypt@npm:^4.0.0":
+-  version: 4.0.3
+-  resolution: "public-encrypt@npm:4.0.3"
+-  dependencies:
+-    bn.js: ^4.1.0
+-    browserify-rsa: ^4.0.0
+-    create-hash: ^1.1.0
+-    parse-asn1: ^5.0.0
+-    randombytes: ^2.0.1
+-    safe-buffer: ^5.1.2
+-  checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935
+-  languageName: node
+-  linkType: hard
+-
+ "pump@npm:^2.0.0":
+   version: 2.0.1
+   resolution: "pump@npm:2.0.1"
+@@ -28181,7 +27735,7 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0":
++"randombytes@npm:^2.1.0":
+   version: 2.1.0
+   resolution: "randombytes@npm:2.1.0"
+   dependencies:
+@@ -28190,16 +27744,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"randomfill@npm:^1.0.3":
+-  version: 1.0.4
+-  resolution: "randomfill@npm:1.0.4"
+-  dependencies:
+-    randombytes: ^2.0.5
+-    safe-buffer: ^5.1.0
+-  checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7
+-  languageName: node
+-  linkType: hard
+-
+ "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1":
+   version: 1.2.1
+   resolution: "range-parser@npm:1.2.1"
+@@ -30443,16 +29987,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1":
+-  version: 2.0.2
+-  resolution: "ripemd160@npm:2.0.2"
+-  dependencies:
+-    hash-base: ^3.0.0
+-    inherits: ^2.0.1
+-  checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393
+-  languageName: node
+-  linkType: hard
+-
+ "rollup-plugin-copy@npm:3.4.0":
+   version: 3.4.0
+   resolution: "rollup-plugin-copy@npm:3.4.0"
+@@ -30638,7 +30172,7 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
++"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
+   version: 5.2.1
+   resolution: "safe-buffer@npm:5.2.1"
+   checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
+@@ -30654,7 +30188,7 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
++"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
+   version: 2.1.2
+   resolution: "safer-buffer@npm:2.1.2"
+   checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
+@@ -30891,12 +30425,10 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"selfsigned@npm:^2.0.1":
+-  version: 2.0.1
+-  resolution: "selfsigned@npm:2.0.1"
+-  dependencies:
+-    node-forge: ^1
+-  checksum: 864e65c2f31ca877bce3ccdaa3bdef5e1e992b63b2a03641e00c24cd305bf2acce093431d1fed2e5ae9f526558db4be5e90baa2b3474c0428fcf7e25cc86ac93
++"selfsigned@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz":
++  version: 1.1.3
++  resolution: "selfsigned@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz"
++  checksum: 4988a0dbdf123fb808194a6198f5951e2df711de6fd967d72a8876baccaa23d5c260efb8f1dbfbc5bf1f852e81f897ad09267908977ab94862867ef971a3d48d
+   languageName: node
+   linkType: hard
+ 
+@@ -31133,18 +30665,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8":
+-  version: 2.4.11
+-  resolution: "sha.js@npm:2.4.11"
+-  dependencies:
+-    inherits: ^2.0.1
+-    safe-buffer: ^5.0.1
+-  bin:
+-    sha.js: ./bin.js
+-  checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07
+-  languageName: node
+-  linkType: hard
+-
+ "shallow-clone@npm:^3.0.0":
+   version: 3.0.1
+   resolution: "shallow-clone@npm:3.0.1"
+@@ -31830,27 +31350,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"sshpk@npm:^1.14.1, sshpk@npm:^1.7.0":
+-  version: 1.16.1
+-  resolution: "sshpk@npm:1.16.1"
+-  dependencies:
+-    asn1: ~0.2.3
+-    assert-plus: ^1.0.0
+-    bcrypt-pbkdf: ^1.0.0
+-    dashdash: ^1.12.0
+-    ecc-jsbn: ~0.1.1
+-    getpass: ^0.1.1
+-    jsbn: ~0.1.0
+-    safer-buffer: ^2.0.2
+-    tweetnacl: ~0.14.0
+-  bin:
+-    sshpk-conv: bin/sshpk-conv
+-    sshpk-sign: bin/sshpk-sign
+-    sshpk-verify: bin/sshpk-verify
+-  checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857
+-  languageName: node
+-  linkType: hard
+-
+ "ssri@npm:^6.0.1":
+   version: 6.0.2
+   resolution: "ssri@npm:6.0.2"
+@@ -33509,13 +33008,6 @@ __metadata:
+   languageName: node
+   linkType: hard
+ 
+-"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0":
+-  version: 0.14.5
+-  resolution: "tweetnacl@npm:0.14.5"
+-  checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487
+-  languageName: node
+-  linkType: hard
+-
+ "type-check@npm:^0.4.0, type-check@npm:~0.4.0":
+   version: 0.4.0
+   resolution: "type-check@npm:0.4.0"
+@@ -34329,17 +33821,6 @@ __metadata:
+   languageName: node
+   linkType: soft
+ 
+-"verror@npm:1.10.0":
+-  version: 1.10.0
+-  resolution: "verror@npm:1.10.0"
+-  dependencies:
+-    assert-plus: ^1.0.0
+-    core-util-is: 1.0.2
+-    extsprintf: ^1.2.0
+-  checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea
+-  languageName: node
+-  linkType: hard
+-
+ "vfile-location@npm:^3.0.0, vfile-location@npm:^3.2.0":
+   version: 3.2.0
+   resolution: "vfile-location@npm:3.2.0"
diff --git a/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch b/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch
new file mode 100644
index 0000000..d8a6d51
--- /dev/null
+++ b/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch
@@ -0,0 +1,358 @@
+From 5749f50533225b5d38fed1ed86b1c893cc0466b5 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Thu, 25 Nov 2021 18:49:52 +0100
+Subject: [PATCH] notifications: use HMAC-SHA256 to generate password reset
+ tokens
+
+* changes the time limit code generation function to use HMAC-SHA256
+  instead of SHA-1
+* multiple new testcases
+
+diff --git a/pkg/services/notifications/codes.go b/pkg/services/notifications/codes.go
+index 32cd5dd7cd..72d33e3814 100644
+--- a/pkg/services/notifications/codes.go
++++ b/pkg/services/notifications/codes.go
+@@ -1,48 +1,53 @@
+ package notifications
+ 
+ import (
+-	"crypto/sha1" // #nosec
++	"crypto/hmac"
++	"crypto/sha256"
+ 	"encoding/hex"
+ 	"fmt"
++	"strconv"
+ 	"time"
+ 
+-	"github.com/unknwon/com"
+-
+ 	"github.com/grafana/grafana/pkg/models"
+ 	"github.com/grafana/grafana/pkg/setting"
+ )
+ 
+-const timeLimitCodeLength = 12 + 6 + 40
++const timeLimitStartDateLength = 12
++const timeLimitMinutesLength = 6
++const timeLimitHmacLength = 64
++const timeLimitCodeLength = timeLimitStartDateLength + timeLimitMinutesLength + timeLimitHmacLength
+ 
+ // create a time limit code
+-// code format: 12 length date time string + 6 minutes string + 40 sha1 encoded string
+-func createTimeLimitCode(data string, minutes int, startInf interface{}) (string, error) {
++// code format: 12 length date time string + 6 minutes string + 64 HMAC-SHA256 encoded string
++func createTimeLimitCode(payload string, minutes int, startStr string) (string, error) {
+ 	format := "200601021504"
+ 
+ 	var start, end time.Time
+-	var startStr, endStr string
++	var endStr string
+ 
+-	if startInf == nil {
++	if startStr == "" {
+ 		// Use now time create code
+ 		start = time.Now()
+ 		startStr = start.Format(format)
+ 	} else {
+ 		// use start string create code
+-		startStr = startInf.(string)
+-		start, _ = time.ParseInLocation(format, startStr, time.Local)
+-		startStr = start.Format(format)
++		var err error
++		start, err = time.ParseInLocation(format, startStr, time.Local)
++		if err != nil {
++			return "", err
++		}
+ 	}
+ 
+ 	end = start.Add(time.Minute * time.Duration(minutes))
+ 	endStr = end.Format(format)
+ 
+-	// create sha1 encode string
+-	sh := sha1.New()
+-	if _, err := sh.Write([]byte(data + setting.SecretKey + startStr + endStr +
+-		com.ToStr(minutes))); err != nil {
+-		return "", err
++	// create HMAC-SHA256 encoded string
++	key := []byte(setting.SecretKey)
++	h := hmac.New(sha256.New, key)
++	if _, err := h.Write([]byte(payload + startStr + endStr)); err != nil {
++		return "", fmt.Errorf("cannot create hmac: %v", err)
+ 	}
+-	encoded := hex.EncodeToString(sh.Sum(nil))
++	encoded := hex.EncodeToString(h.Sum(nil))
+ 
+ 	code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded)
+ 	return code, nil
+@@ -50,29 +55,32 @@ func createTimeLimitCode(data string, minutes int, startInf interface{}) (string
+ 
+ // verify time limit code
+ func validateUserEmailCode(cfg *setting.Cfg, user *models.User, code string) (bool, error) {
+-	if len(code) <= 18 {
++	if len(code) < timeLimitCodeLength {
+ 		return false, nil
+ 	}
+ 
+-	minutes := cfg.EmailCodeValidMinutes
+ 	code = code[:timeLimitCodeLength]
+ 
+ 	// split code
+-	start := code[:12]
+-	lives := code[12:18]
+-	if d, err := com.StrTo(lives).Int(); err == nil {
+-		minutes = d
++	startStr := code[:timeLimitStartDateLength]
++	minutesStr := code[timeLimitStartDateLength : timeLimitStartDateLength+timeLimitMinutesLength]
++	minutes, err := strconv.Atoi(minutesStr)
++	if err != nil {
++		return false, fmt.Errorf("invalid time limit code: %v", err)
+ 	}
+ 
+ 	// right active code
+-	data := com.ToStr(user.Id) + user.Email + user.Login + user.Password + user.Rands
+-	retCode, err := createTimeLimitCode(data, minutes, start)
++	payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
++	expectedCode, err := createTimeLimitCode(payload, minutes, startStr)
+ 	if err != nil {
+ 		return false, err
+ 	}
+-	if retCode == code && minutes > 0 {
++	if hmac.Equal([]byte(code), []byte(expectedCode)) && minutes > 0 {
+ 		// check time is expired or not
+-		before, _ := time.ParseInLocation("200601021504", start, time.Local)
++		before, err := time.ParseInLocation("200601021504", startStr, time.Local)
++		if err != nil {
++			return false, err
++		}
+ 		now := time.Now()
+ 		if before.Add(time.Minute*time.Duration(minutes)).Unix() > now.Unix() {
+ 			return true, nil
+@@ -93,15 +101,15 @@ func getLoginForEmailCode(code string) string {
+ 	return string(b)
+ }
+ 
+-func createUserEmailCode(cfg *setting.Cfg, u *models.User, startInf interface{}) (string, error) {
++func createUserEmailCode(cfg *setting.Cfg, user *models.User, startStr string) (string, error) {
+ 	minutes := cfg.EmailCodeValidMinutes
+-	data := com.ToStr(u.Id) + u.Email + u.Login + u.Password + u.Rands
+-	code, err := createTimeLimitCode(data, minutes, startInf)
++	payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
++	code, err := createTimeLimitCode(payload, minutes, startStr)
+ 	if err != nil {
+ 		return "", err
+ 	}
+ 
+ 	// add tail hex username
+-	code += hex.EncodeToString([]byte(u.Login))
++	code += hex.EncodeToString([]byte(user.Login))
+ 	return code, nil
+ }
+diff --git a/pkg/services/notifications/codes_test.go b/pkg/services/notifications/codes_test.go
+index a314c8deca..be9b68ca69 100644
+--- a/pkg/services/notifications/codes_test.go
++++ b/pkg/services/notifications/codes_test.go
+@@ -1,7 +1,10 @@
+ package notifications
+ 
+ import (
++	"fmt"
++	"strconv"
+ 	"testing"
++	"time"
+ 
+ 	"github.com/grafana/grafana/pkg/models"
+ 	"github.com/grafana/grafana/pkg/setting"
+@@ -9,18 +12,126 @@ import (
+ 	"github.com/stretchr/testify/require"
+ )
+ 
++func TestTimeLimitCodes(t *testing.T) {
++	cfg := setting.NewCfg()
++	cfg.EmailCodeValidMinutes = 120
++	user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"}
++
++	format := "200601021504"
++	mailPayload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
++	tenMinutesAgo := time.Now().Add(-time.Minute * 10)
++
++	tests := []struct {
++		desc    string
++		payload string
++		start   time.Time
++		minutes int
++		valid   bool
++	}{
++		{
++			desc:    "code generated 10 minutes ago, 5 minutes valid",
++			payload: mailPayload,
++			start:   tenMinutesAgo,
++			minutes: 5,
++			valid:   false,
++		},
++		{
++			desc:    "code generated 10 minutes ago, 9 minutes valid",
++			payload: mailPayload,
++			start:   tenMinutesAgo,
++			minutes: 9,
++			valid:   false,
++		},
++		{
++			desc:    "code generated 10 minutes ago, 10 minutes valid",
++			payload: mailPayload,
++			start:   tenMinutesAgo,
++			minutes: 10,
++			// code was valid exactly 10 minutes since evaluating the tenMinutesAgo assignment
++			// by the time this test is run the code is already expired
++			valid: false,
++		},
++		{
++			desc:    "code generated 10 minutes ago, 11 minutes valid",
++			payload: mailPayload,
++			start:   tenMinutesAgo,
++			minutes: 11,
++			valid:   true,
++		},
++		{
++			desc:    "code generated 10 minutes ago, 20 minutes valid",
++			payload: mailPayload,
++			start:   tenMinutesAgo,
++			minutes: 20,
++			valid:   true,
++		},
++		{
++			desc:    "code generated 10 minutes ago, 20 minutes valid, tampered payload",
++			payload: mailPayload[:len(mailPayload)-1] + "x",
++			start:   tenMinutesAgo,
++			minutes: 20,
++			valid:   false,
++		},
++	}
++
++	for _, test := range tests {
++		t.Run(test.desc, func(t *testing.T) {
++			code, err := createTimeLimitCode(test.payload, test.minutes, test.start.Format(format))
++			require.NoError(t, err)
++
++			isValid, err := validateUserEmailCode(cfg, user, code)
++			require.NoError(t, err)
++			require.Equal(t, test.valid, isValid)
++		})
++	}
++
++	t.Run("tampered minutes", func(t *testing.T) {
++		code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format))
++		require.NoError(t, err)
++
++		// code is expired
++		isValid, err := validateUserEmailCode(cfg, user, code)
++		require.NoError(t, err)
++		require.Equal(t, false, isValid)
++
++		// let's try to extend the code by tampering the minutes
++		code = code[:12] + fmt.Sprintf("%06d", 20) + code[18:]
++		isValid, err = validateUserEmailCode(cfg, user, code)
++		require.NoError(t, err)
++		require.Equal(t, false, isValid)
++	})
++
++	t.Run("tampered start string", func(t *testing.T) {
++		code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format))
++		require.NoError(t, err)
++
++		// code is expired
++		isValid, err := validateUserEmailCode(cfg, user, code)
++		require.NoError(t, err)
++		require.Equal(t, false, isValid)
++
++		// let's try to extend the code by tampering the start string
++		oneMinuteAgo := time.Now().Add(-time.Minute)
++
++		code = oneMinuteAgo.Format(format) + code[12:]
++		isValid, err = validateUserEmailCode(cfg, user, code)
++		require.NoError(t, err)
++		require.Equal(t, false, isValid)
++	})
++}
++
+ func TestEmailCodes(t *testing.T) {
+ 	t.Run("When generating code", func(t *testing.T) {
+ 		cfg := setting.NewCfg()
+ 		cfg.EmailCodeValidMinutes = 120
+ 
+ 		user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"}
+-		code, err := createUserEmailCode(cfg, user, nil)
++		code, err := createUserEmailCode(cfg, user, "")
+ 		require.NoError(t, err)
+ 
+ 		t.Run("getLoginForCode should return login", func(t *testing.T) {
+ 			login := getLoginForEmailCode(code)
+-			require.Equal(t, login, "asd")
++			require.Equal(t, "asd", login)
+ 		})
+ 
+ 		t.Run("Can verify valid code", func(t *testing.T) {
+@@ -29,7 +140,7 @@ func TestEmailCodes(t *testing.T) {
+ 			require.True(t, isValid)
+ 		})
+ 
+-		t.Run("Cannot verify in-valid code", func(t *testing.T) {
++		t.Run("Cannot verify invalid code", func(t *testing.T) {
+ 			code = "ASD"
+ 			isValid, err := validateUserEmailCode(cfg, user, code)
+ 			require.NoError(t, err)
+diff --git a/pkg/services/notifications/notifications.go b/pkg/services/notifications/notifications.go
+index 84a0d42cb6..52facd0992 100644
+--- a/pkg/services/notifications/notifications.go
++++ b/pkg/services/notifications/notifications.go
+@@ -168,7 +168,7 @@ func (ns *NotificationService) SendEmailCommandHandler(ctx context.Context, cmd
+ }
+ 
+ func (ns *NotificationService) SendResetPasswordEmail(ctx context.Context, cmd *models.SendResetPasswordEmailCommand) error {
+-	code, err := createUserEmailCode(ns.Cfg, cmd.User, nil)
++	code, err := createUserEmailCode(ns.Cfg, cmd.User, "")
+ 	if err != nil {
+ 		return err
+ 	}
+diff --git a/pkg/services/notifications/notifications_test.go b/pkg/services/notifications/notifications_test.go
+index 71970e20a0..6f4b318fe0 100644
+--- a/pkg/services/notifications/notifications_test.go
++++ b/pkg/services/notifications/notifications_test.go
+@@ -2,6 +2,7 @@ package notifications
+ 
+ import (
+ 	"context"
++	"regexp"
+ 	"testing"
+ 
+ 	"github.com/grafana/grafana/pkg/bus"
+@@ -185,7 +186,8 @@ func TestSendEmailAsync(t *testing.T) {
+ 
+ 	t.Run("When sending reset email password", func(t *testing.T) {
+ 		sut, _ := createSut(t, bus)
+-		err := sut.SendResetPasswordEmail(context.Background(), &models.SendResetPasswordEmailCommand{User: &models.User{Email: "asd@asd.com"}})
++		user := models.User{Email: "asd@asd.com", Login: "asd@asd.com"}
++		err := sut.SendResetPasswordEmail(context.Background(), &models.SendResetPasswordEmailCommand{User: &user})
+ 		require.NoError(t, err)
+ 
+ 		sentMsg := <-sut.mailQueue
+@@ -194,6 +196,21 @@ func TestSendEmailAsync(t *testing.T) {
+ 		assert.Equal(t, "Reset your Grafana password - asd@asd.com", sentMsg.Subject)
+ 		assert.NotContains(t, sentMsg.Body["text/html"], "Subject")
+ 		assert.NotContains(t, sentMsg.Body["text/plain"], "Subject")
++
++		// find code in mail
++		r, _ := regexp.Compile(`code=(\w+)`)
++		match := r.FindString(sentMsg.Body["text/plain"])
++		code := match[len("code="):]
++
++		// verify code
++		query := models.ValidateResetPasswordCodeQuery{Code: code}
++		getUserByLogin := func(ctx context.Context, login string) (*models.User, error) {
++			query := models.GetUserByLoginQuery{LoginOrEmail: login}
++			query.Result = &user
++			return query.Result, nil
++		}
++		err = sut.ValidateResetPasswordCode(context.Background(), &query, getUserByLogin)
++		require.NoError(t, err)
+ 	})
+ 
+ 	t.Run("When SMTP disabled in configuration", func(t *testing.T) {
diff --git a/SOURCES/0007-skip-marketplace-plugin-install-test.patch b/SOURCES/0007-skip-marketplace-plugin-install-test.patch
new file mode 100644
index 0000000..5dff9fc
--- /dev/null
+++ b/SOURCES/0007-skip-marketplace-plugin-install-test.patch
@@ -0,0 +1,21 @@
+From 03a5c7f452efb1dbf605bba8caf3e86e15888c25 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Thu, 23 Jun 2022 17:00:46 +0200
+Subject: [PATCH] skip marketplace plugin install test
+
+This test (tries to) install a plugin from the Grafana marketplace.
+Network connectivity is disabled in the build environment for security
+reasons, therefore we need to disable this test.
+
+diff --git a/pkg/tests/api/plugins/api_plugins_test.go b/pkg/tests/api/plugins/api_plugins_test.go
+index e86ce50830..fd60fbe67c 100644
+--- a/pkg/tests/api/plugins/api_plugins_test.go
++++ b/pkg/tests/api/plugins/api_plugins_test.go
+@@ -55,6 +55,7 @@ func TestPlugins(t *testing.T) {
+ 		})
+ 
+ 		t.Run("Request is not forbidden if from an admin", func(t *testing.T) {
++			t.Skip("this test requires connectivity to the Grafana plugin marketplace (fetching metadata)")
+ 			statusCode, body := makePostRequest(t, grafanaAPIURL(usernameAdmin, grafanaListedAddr, "plugins/test/install"))
+ 
+ 			assert.Equal(t, 404, statusCode)
diff --git a/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch b/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
new file mode 100644
index 0000000..cb7113d
--- /dev/null
+++ b/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
@@ -0,0 +1,20 @@
+From dc4e1c882d28db17064bd4fb788775a86ebfe066 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Mon, 27 Jun 2022 17:12:27 +0200
+Subject: [PATCH] Prometheus: Fix integer overflow in rate interval calculation
+ on 32-bit architectures
+
+
+diff --git a/pkg/tsdb/prometheus/buffered/time_series_query.go b/pkg/tsdb/prometheus/buffered/time_series_query.go
+index 40db2d9100..0af2d3ecab 100644
+--- a/pkg/tsdb/prometheus/buffered/time_series_query.go
++++ b/pkg/tsdb/prometheus/buffered/time_series_query.go
+@@ -326,7 +326,7 @@ func calculateRateInterval(interval time.Duration, scrapeInterval string, interv
+ 		return time.Duration(0)
+ 	}
+ 
+-	rateInterval := time.Duration(int(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration))))
++	rateInterval := time.Duration(int64(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration))))
+ 	return rateInterval
+ }
+ 
diff --git a/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch b/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
new file mode 100644
index 0000000..9dc7e5e
--- /dev/null
+++ b/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
@@ -0,0 +1,20 @@
+From 09be2f6709e7d05a2f75756c5f58b0602b54af72 Mon Sep 17 00:00:00 2001
+From: Andreas Gerstmayr <agerstmayr@redhat.com>
+Date: Tue, 5 Jul 2022 17:04:13 +0200
+Subject: [PATCH] Prometheus: Fix integer overflow in rate interval calculation
+ on 32-bit architectures 2
+
+
+diff --git a/pkg/tsdb/prometheus/models/query.go b/pkg/tsdb/prometheus/models/query.go
+index bdd48d08ed..aa2b1f9945 100644
+--- a/pkg/tsdb/prometheus/models/query.go
++++ b/pkg/tsdb/prometheus/models/query.go
+@@ -181,7 +181,7 @@ func calculateRateInterval(interval time.Duration, scrapeInterval string, interv
+ 		return time.Duration(0)
+ 	}
+ 
+-	rateInterval := time.Duration(int(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration))))
++	rateInterval := time.Duration(int64(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration))))
+ 	return rateInterval
+ }
+ 
diff --git a/SOURCES/001-wrappers-grafana-cli.patch b/SOURCES/001-wrappers-grafana-cli.patch
deleted file mode 100644
index 01fe90e..0000000
--- a/SOURCES/001-wrappers-grafana-cli.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-diff --git a/packaging/wrappers/grafana-cli b/packaging/wrappers/grafana-cli
-index 9cad151c0d..a786edc596 100755
---- a/packaging/wrappers/grafana-cli
-+++ b/packaging/wrappers/grafana-cli
-@@ -5,18 +5,19 @@
- # the system-wide Grafana configuration that was bundled with the package as we
- # use the binary.
- 
--DEFAULT=/etc/default/grafana
-+DEFAULT=/etc/sysconfig/grafana-server
- 
- GRAFANA_HOME=/usr/share/grafana
- CONF_DIR=/etc/grafana
- DATA_DIR=/var/lib/grafana
- PLUGINS_DIR=/var/lib/grafana/plugins
- LOG_DIR=/var/log/grafana
-+LIBEXEC_DIR=/usr/libexec/grafana
- 
- CONF_FILE=$CONF_DIR/grafana.ini
- PROVISIONING_CFG_DIR=$CONF_DIR/provisioning
- 
--EXECUTABLE=$GRAFANA_HOME/bin/grafana-cli
-+EXECUTABLE=$LIBEXEC_DIR/grafana-cli
- 
- if [ ! -x $EXECUTABLE ]; then
-  echo "Program not installed or not executable"
-@@ -24,6 +25,7 @@ if [ ! -x $EXECUTABLE ]; then
- fi
- 
- # overwrite settings from default file
-+#shellcheck disable=SC1090
- if [ -f "$DEFAULT" ]; then
-   . "$DEFAULT"
- fi
-@@ -36,4 +38,13 @@ OPTS="--homepath=${GRAFANA_HOME} \
-                         cfg:default.paths.logs=${LOG_DIR} \
-                         cfg:default.paths.plugins=${PLUGINS_DIR}'"
- 
--eval $EXECUTABLE "$OPTS" "$@"
-+if [ "$(id -u)" -eq 0 ]; then
-+  cd "${GRAFANA_HOME}"
-+  exec runuser -u "${GRAFANA_USER}" -- "$EXECUTABLE" "$OPTS" "$@"
-+elif [ "$(id -u -n)" = "${GRAFANA_USER}" ]; then
-+  cd "${GRAFANA_HOME}"
-+  exec "$EXECUTABLE" "$OPTS" "$@"
-+else
-+  echo "$0: please run this script as user \"${GRAFANA_USER}\" or root."
-+  exit 5
-+fi
diff --git a/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch b/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch
new file mode 100644
index 0000000..427ec57
--- /dev/null
+++ b/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch
@@ -0,0 +1,100 @@
+From 74f3c59f7096b5c31d5c218310b20775eb111d0f Mon Sep 17 00:00:00 2001
+From: Karl Persson <kalle.persson@grafana.com>
+Date: Fri, 21 Oct 2022 14:15:21 +0200
+Subject: [PATCH] [v9.0.x] Login email before username (#57406)
+
+* Add test for username/login field conflict
+
+* Swap order of login fields
+
+Co-authored-by: linoman <2051016+linoman@users.noreply.github.com>
+
+diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go
+index 9cd80da396..00e3ddc2df 100644
+--- a/pkg/services/sqlstore/user.go
++++ b/pkg/services/sqlstore/user.go
+@@ -170,20 +170,24 @@ func (ss *SQLStore) GetUserByLogin(ctx context.Context, query *models.GetUserByL
+ 			return models.ErrUserNotFound
+ 		}
+ 
+-		// Try and find the user by login first.
+-		// It's not sufficient to assume that a LoginOrEmail with an "@" is an email.
++		var has bool
++		var err error
+ 		user := &models.User{Login: query.LoginOrEmail}
+-		has, err := sess.Where(notServiceAccountFilter(ss)).Get(user)
+-
+-		if err != nil {
+-			return err
+-		}
+ 
+-		if !has && strings.Contains(query.LoginOrEmail, "@") {
+-			// If the user wasn't found, and it contains an "@" fallback to finding the
+-			// user by email.
++		// Since username can be an email address, attempt login with email address
++		// first if the login field has the "@" symbol.
++		if strings.Contains(query.LoginOrEmail, "@") {
+ 			user = &models.User{Email: query.LoginOrEmail}
+ 			has, err = sess.Get(user)
++
++			if err != nil {
++				return err
++			}
++		}
++
++		// Lookup the login field instead of email field
++		if !has {
++			has, err = sess.Where(notServiceAccountFilter(ss)).Get(user)
+ 		}
+ 
+ 		if err != nil {
+diff --git a/pkg/services/sqlstore/user_test.go b/pkg/services/sqlstore/user_test.go
+index d3803fa0c9..da23a7cca9 100644
+--- a/pkg/services/sqlstore/user_test.go
++++ b/pkg/services/sqlstore/user_test.go
+@@ -51,6 +51,45 @@ func TestIntegrationUserDataAccess(t *testing.T) {
+ 		require.False(t, query.Result.IsDisabled)
+ 	})
+ 
++	t.Run("Get User by login - user_2 uses user_1.email as login", func(t *testing.T) {
++		ss = InitTestDB(t)
++
++		// create user_1
++		cmd := models.CreateUserCommand{
++			Email:      "user_1@mail.com",
++			Name:       "user_1",
++			Login:      "user_1",
++			Password:   "user_1_password",
++			IsDisabled: true,
++		}
++		user_1, err := ss.CreateUser(context.Background(), cmd)
++		require.Nil(t, err)
++
++		// create user_2
++		cmd = models.CreateUserCommand{
++			Email:      "user_2@mail.com",
++			Name:       "user_2",
++			Login:      "user_1@mail.com",
++			Password:   "user_2_password",
++			IsDisabled: true,
++		}
++		user_2, err := ss.CreateUser(context.Background(), cmd)
++		require.Nil(t, err)
++
++		// query user database for user_1 email
++		query := models.GetUserByLoginQuery{LoginOrEmail: "user_1@mail.com"}
++		err = ss.GetUserByLogin(context.Background(), &query)
++		require.Nil(t, err)
++
++		// expect user_1 as result
++		require.Equal(t, user_1.Email, query.Result.Email)
++		require.Equal(t, user_1.Login, query.Result.Login)
++		require.Equal(t, user_1.Name, query.Result.Name)
++		require.NotEqual(t, user_2.Email, query.Result.Email)
++		require.NotEqual(t, user_2.Login, query.Result.Login)
++		require.NotEqual(t, user_2.Name, query.Result.Name)
++	})
++
+ 	t.Run("Testing DB - creates and loads disabled user", func(t *testing.T) {
+ 		ss = InitTestDB(t)
+ 		cmd := models.CreateUserCommand{
diff --git a/SOURCES/002-manpages.patch b/SOURCES/002-manpages.patch
deleted file mode 100644
index 2927b39..0000000
--- a/SOURCES/002-manpages.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1
-new file mode 100644
-index 0000000000..7ac2af882c
---- /dev/null
-+++ b/docs/man/man1/grafana-cli.1
-@@ -0,0 +1,60 @@
-+.TH GRAFANA "1" "April 2022" "Grafana cli version 7.5.15" "User Commands"
-+.SH NAME
-+grafana-cli \- command line administration for the Grafana metrics dashboard and graph editor
-+.SH DESCRIPTION
-+.SS "NAME:"
-+.IP
-+grafana-cli
-+.SS "USAGE:"
-+.IP
-+\fBgrafana\-cli\fP [\fIglobal options\fP] \fIcommand\fP [\fIcommand options\fP] [\fIarguments\fP...]
-+.SS "COMMANDS:"
-+.TP
-+plugins
-+Manage plugins for grafana
-+.TP
-+admin
-+Grafana admin commands
-+.TP
-+help, h
-+Shows a list of commands or help for one command
-+.SS "GLOBAL OPTIONS:"
-+.TP
-+\fB\-\-pluginsDir\fR value
-+path to the grafana plugin directory (default: "/var/lib/grafana/plugins") [$GF_PLUGIN_DIR]
-+.TP
-+\fB\-\-repo\fR value
-+url to the plugin repository (default: "https://grafana.com/api/plugins") [$GF_PLUGIN_REPO]
-+.TP
-+\fB\-\-pluginUrl\fR value
-+Full url to the plugin zip file instead of downloading the plugin from grafana.com/api [$GF_PLUGIN_URL]
-+.TP
-+\fB\-\-insecure\fR
-+Skip TLS verification (insecure)
-+.TP
-+\fB\-\-debug\fR, \fB\-d\fR
-+enable debug logging
-+.TP
-+\fB\-\-configOverrides\fR value
-+Configuration options to override defaults as a string. e.g. cfg:default.paths.log=/dev/null
-+.TP
-+\fB\-\-homepath\fR value
-+Path to Grafana install/home path, defaults to working directory
-+.TP
-+\fB\-\-config\fR value
-+Path to config file
-+.TP
-+\fB\-\-help\fR, \fB\-h\fR
-+show help
-+.TP
-+\fB\-\-version\fR, \fB\-v\fR
-+print the version
-+.SH "SEE ALSO"
-+Additional documentation for
-+.B grafana-cli
-+is available on-line at
-+.BR http://docs.grafana.org/administration/cli/ .
-+The full documentation for
-+.B Grafana
-+is available on-line at
-+.BR http://docs.grafana.org/ .
-diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1
-new file mode 100644
-index 0000000000..c616268b31
---- /dev/null
-+++ b/docs/man/man1/grafana-server.1
-@@ -0,0 +1,72 @@
-+.TH VERSION "1" "April 2022" "Version 7.5.15" "User Commands"
-+.SH NAME
-+grafana-server \- back-end server for the Grafana metrics dashboard and graph editor
-+.SH DESCRIPTION
-+.B grafana-server
-+is the back-end server for the Grafana metrics dashboard and graph editor.
-+The
-+.B grafana-server
-+program should not normally be run from the command line,
-+except when testing or for development purposes.
-+Rather it should be managed by
-+.BR systemd .
-+After installing Grafana, the systemd service should be enabled and started as follows:
-+.P
-+.in 1i
-+.B systemctl daemon-reload
-+.br
-+.B systemctl enable grafana-server.service
-+.br
-+.B systemctl start grafana-server.service
-+.in
-+.P
-+.SH OPTIONS
-+The
-+.B gafana-server
-+configuration is specified in
-+.BR /etc/grafana/grafana.ini
-+and is well documented with comments.
-+The command-line options listed below override options of
-+the same (or similar) name in the configuration file.
-+.P
-+.HP
-+\fB\-config\fR string
-+.IP
-+path to config file
-+.HP
-+\fB\-homepath\fR string
-+.IP
-+path to grafana install/home path, defaults to working directory
-+.HP
-+\fB\-packaging\fR string
-+.IP
-+describes the way Grafana was installed (default "unknown")
-+.HP
-+\fB\-pidfile\fR string
-+.IP
-+path to pid file
-+.HP
-+\fB\-profile\fR
-+.IP
-+Turn on pprof profiling
-+.HP
-+\fB\-profile\-port\fR uint
-+.IP
-+Define custom port for profiling (default 6060)
-+.HP
-+\fB\-tracing\fR
-+.IP
-+Turn on tracing
-+.HP
-+\fB\-tracing\-file\fR string
-+.IP
-+Define tracing output file (default "trace.out")
-+.TP
-+\fB\-v\fR
-+.IP
-+prints current version and exits
-+.SH "SEE ALSO"
-+The full documentation for
-+.B Grafana
-+is available on-line at
-+.BR http://docs.grafana.org/ .
diff --git a/SOURCES/003-fix-dashboard-abspath-test.patch b/SOURCES/003-fix-dashboard-abspath-test.patch
deleted file mode 100644
index ad7e5bf..0000000
--- a/SOURCES/003-fix-dashboard-abspath-test.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/pkg/services/provisioning/dashboards/file_reader_linux_test.go b/pkg/services/provisioning/dashboards/file_reader_linux_test.go
-index 3584bbc242..1a89767b69 100644
---- a/pkg/services/provisioning/dashboards/file_reader_linux_test.go
-+++ b/pkg/services/provisioning/dashboards/file_reader_linux_test.go
-@@ -28,6 +28,7 @@ func TestProvisionedSymlinkedFolder(t *testing.T) {
- 	}
- 
- 	want, err := filepath.Abs(containingID)
-+	want, err = filepath.EvalSymlinks(want)
- 
- 	if err != nil {
- 		t.Errorf("expected err to be nil")
-diff --git a/pkg/services/provisioning/dashboards/file_reader_test.go b/pkg/services/provisioning/dashboards/file_reader_test.go
-index 946d487d5f..2acef40eed 100644
---- a/pkg/services/provisioning/dashboards/file_reader_test.go
-+++ b/pkg/services/provisioning/dashboards/file_reader_test.go
-@@ -318,6 +318,7 @@ func TestDashboardFileReader(t *testing.T) {
- 			}
- 
- 			absPath1, err := filepath.Abs(unprovision + "/dashboard1.json")
-+			absPath1, err = filepath.EvalSymlinks(absPath1)
- 			So(err, ShouldBeNil)
- 			// This one does not exist on disk, simulating a deleted file
- 			absPath2, err := filepath.Abs(unprovision + "/dashboard2.json")
diff --git a/SOURCES/004-skip-x86-goldenfiles-tests.patch b/SOURCES/004-skip-x86-goldenfiles-tests.patch
deleted file mode 100644
index bb61e0b..0000000
--- a/SOURCES/004-skip-x86-goldenfiles-tests.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-diff --git a/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts b/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts
-index 96efaccfce..bcdd98144f 100644
---- a/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts
-+++ b/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts
-@@ -52,7 +52,7 @@ describe('Read/Write arrow Table to DataFrame', () => {
-     expect(after).toEqual(before);
-   });
- 
--  test('should read all types', () => {
-+  test.skip('should read all types', () => {
-     const fullpath = path.resolve(__dirname, './__snapshots__/all_types.golden.arrow');
-     const arrow = fs.readFileSync(fullpath);
-     const table = Table.from([arrow]);
-diff --git a/packages/grafana-runtime/src/utils/queryResponse.test.ts b/packages/grafana-runtime/src/utils/queryResponse.test.ts
-index 0adb915d2c..8985d7beab 100644
---- a/packages/grafana-runtime/src/utils/queryResponse.test.ts
-+++ b/packages/grafana-runtime/src/utils/queryResponse.test.ts
-@@ -47,7 +47,7 @@ const emptyResults = {
- /* eslint-enable */
- 
- describe('Query Response parser', () => {
--  test('should parse output with dataframe', () => {
-+  test.skip('should parse output with dataframe', () => {
-     const res = toDataQueryResponse(resp);
-     const frames = res.data;
-     expect(frames).toHaveLength(2);
-@@ -131,7 +131,7 @@ describe('Query Response parser', () => {
-     `);
-   });
- 
--  test('should parse output with dataframe in order of queries', () => {
-+  test.skip('should parse output with dataframe in order of queries', () => {
-     const queries: DataQuery[] = [{ refId: 'B' }, { refId: 'A' }];
-     const res = toDataQueryResponse(resp, queries);
-     const frames = res.data;
-@@ -250,7 +250,7 @@ describe('Query Response parser', () => {
-     expect(ids).toEqual(['A', 'B', 'X']);
-   });
- 
--  test('resultWithError', () => {
-+  test.skip('resultWithError', () => {
-     // Generated from:
-     // qdr.Responses[q.GetRefID()] = backend.DataResponse{
-     //   Error: fmt.Errorf("an Error: %w", fmt.Errorf("another error")),
-diff --git a/pkg/tsdb/influxdb/flux/executor_test.go b/pkg/tsdb/influxdb/flux/executor_test.go
-index 7cfc8bd20a..add6b5f3b8 100644
---- a/pkg/tsdb/influxdb/flux/executor_test.go
-+++ b/pkg/tsdb/influxdb/flux/executor_test.go
-@@ -68,6 +68,7 @@ func executeMockedQuery(t *testing.T, name string, query queryModel) *backend.Da
- }
- 
- func verifyGoldenResponse(t *testing.T, name string) *backend.DataResponse {
-+	t.Skip("x86 memory dump is not compatible with other architectures")
- 	dr := executeMockedQuery(t, name, queryModel{MaxDataPoints: 100})
- 
- 	err := experimental.CheckGoldenDataResponse(filepath.Join("testdata", fmt.Sprintf("%s.golden.txt", name)),
-diff --git a/public/app/plugins/datasource/cloudwatch/specs/datasource.test.ts b/public/app/plugins/datasource/cloudwatch/specs/datasource.test.ts
-index afc8ba357b..587092a58d 100644
---- a/public/app/plugins/datasource/cloudwatch/specs/datasource.test.ts
-+++ b/public/app/plugins/datasource/cloudwatch/specs/datasource.test.ts
-@@ -78,7 +78,7 @@ describe('CloudWatchDatasource', () => {
-   });
- 
-   describe('When getting log groups', () => {
--    it('should return log groups as an array of strings', async () => {
-+    it.skip('should return log groups as an array of strings', async () => {
-       const response = {
-         results: {
-           A: {
diff --git a/SOURCES/005-remove-unused-dependencies.patch b/SOURCES/005-remove-unused-dependencies.patch
deleted file mode 100644
index 585c0c1..0000000
--- a/SOURCES/005-remove-unused-dependencies.patch
+++ /dev/null
@@ -1,206 +0,0 @@
-From ce669908e2d54d29dd4b585f3614f6df8c447f8a Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 16:12:37 +0200
-Subject: [PATCH] remove unused dependencies
-
-
-diff --git a/go.mod b/go.mod
-index c1d6c0ee42..c040bbaab0 100644
---- a/go.mod
-+++ b/go.mod
-@@ -21,7 +21,6 @@ require (
- 	github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
- 	github.com/centrifugal/centrifuge v0.13.0
- 	github.com/cortexproject/cortex v1.4.1-0.20201022071705-85942c5703cf
--	github.com/crewjam/saml v0.4.6-0.20201227203850-bca570abb2ce
- 	github.com/davecgh/go-spew v1.1.1
- 	github.com/denisenkom/go-mssqldb v0.0.0-20200910202707-1e08a3fab204
- 	github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 // indirect
-@@ -57,7 +56,6 @@ require (
- 	github.com/jmespath/go-jmespath v0.4.0
- 	github.com/jonboulle/clockwork v0.2.2 // indirect
- 	github.com/json-iterator/go v1.1.10
--	github.com/jung-kurt/gofpdf v1.16.2
- 	github.com/lib/pq v1.9.0
- 	github.com/linkedin/goavro/v2 v2.10.0
- 	github.com/magefile/mage v1.11.0
-diff --git a/go.sum b/go.sum
-index 98874d6a7c..50212f12f2 100644
---- a/go.sum
-+++ b/go.sum
-@@ -206,12 +206,10 @@ github.com/bmatcuk/doublestar v1.2.2/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9
- github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
- github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
- github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
--github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
- github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
- github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
- github.com/bsm/sarama-cluster v2.1.13+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM=
- github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34=
--github.com/c2h5oh/datasize v0.0.0-20200112174442-28bbd4740fee h1:BnPxIde0gjtTnc9Er7cxvBk8DHLWhEux0SxayC8dP6I=
- github.com/c2h5oh/datasize v0.0.0-20200112174442-28bbd4740fee/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M=
- github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
- github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-@@ -281,9 +279,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng
- github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
- github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
- github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
--github.com/crewjam/httperr v0.0.0-20190612203328-a946449404da/go.mod h1:+rmNIXRvYMqLQeR4DHyTvs6y0MEMymTz4vyFpFkKTPs=
--github.com/crewjam/saml v0.4.6-0.20201227203850-bca570abb2ce h1:pAuTpLhCqC20s2RLhUirfw606jReW+8z2U5EvG+0S7E=
--github.com/crewjam/saml v0.4.6-0.20201227203850-bca570abb2ce/go.mod h1:/gCaeLf13J8/621RNZ6TaExji/8xCWcn6UmdJ57wURQ=
- github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ=
- github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
- github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
-@@ -302,13 +297,11 @@ github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2
- github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
- github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
- github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
--github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4=
- github.com/deepmap/oapi-codegen v1.3.13 h1:9HKGCsdJqE4dnrQ8VerFS0/1ZOJPmAhN+g8xgp8y3K4=
- github.com/deepmap/oapi-codegen v1.3.13/go.mod h1:WAmG5dWY8/PYHt4vKxlt90NsbHMAOCiteYKZMiIRfOo=
- github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
- github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE=
- github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
--github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
- github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
- github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ=
- github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
-@@ -434,8 +427,6 @@ github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih
- github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
- github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
- github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
--github.com/go-macaron/binding v0.0.0-20190806013118-0b4f37bab25b h1:U65wj9SF7qUBTGrnt6VxbHCT0Dw8dz4uch52G+5SdfA=
--github.com/go-macaron/binding v0.0.0-20190806013118-0b4f37bab25b/go.mod h1:AG8Z6qkQM8s47aUDJOco/SNwJ8Czif2hMm7rc0abDog=
- github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07 h1:YSIA98PevNf1NtCa/J6cz7gjzpz99WVAOa9Eg0klKps=
- github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07/go.mod h1://cJFfDp/70L0oTNAMB+M8Jd0rpuIx/55iARuJ6StwE=
- github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 h1:NjHlg70DuOkcAMqgt0+XA+NHwtu66MkTVVgR4fFWbcI=
-@@ -886,7 +877,6 @@ github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9
- github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
- github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
- github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
--github.com/jonboulle/clockwork v0.2.1/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
- github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
- github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
- github.com/joncrlsn/dque v2.2.1-0.20200515025108-956d14155fa2+incompatible/go.mod h1:hDZb8oMj3Kp8MxtbNLg9vrtAUDHjgI1yZvqivT4O8Iw=
-@@ -914,10 +904,7 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
- github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
- github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
- github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
--github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
- github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
--github.com/jung-kurt/gofpdf v1.16.2 h1:jgbatWHfRlPYiK85qgevsZTHviWXKwB1TTiKdz5PtRc=
--github.com/jung-kurt/gofpdf v1.16.2/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0=
- github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
- github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
- github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
-@@ -1006,8 +993,6 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
- github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
- github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
- github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
--github.com/mattermost/xml-roundtrip-validator v0.0.0-20201213122252-bcd7e1b9601e h1:qqXczln0qwkVGcpQ+sQuPOVntt2FytYarXXxYSNJkgw=
--github.com/mattermost/xml-roundtrip-validator v0.0.0-20201213122252-bcd7e1b9601e/go.mod h1:qccnGMcpgwcNaBnxqpJpWWUiPNr5H3O8eDgGV9gT5To=
- github.com/mattetti/filebuffer v1.0.0/go.mod h1:X6nyAIge2JGVmuJt2MFCqmHrb/5IHiphfHtot0s5cnI=
- github.com/mattetti/filebuffer v1.0.1 h1:gG7pyfnSIZCxdoKq+cPa8T0hhYtD9NxCdI4D7PTjRLM=
- github.com/mattetti/filebuffer v1.0.1/go.mod h1:YdMURNDOttIiruleeVr6f56OrMc+MydEnTcXwtkxNVs=
-@@ -1083,7 +1068,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
- github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
- github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
- github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
--github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
- github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
- github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE=
- github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-@@ -1200,7 +1184,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR
- github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
- github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
- github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
--github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
- github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU=
- github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
- github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
-@@ -1327,7 +1310,6 @@ github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNue
- github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
- github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
- github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
--github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
- github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
- github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
- github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-@@ -1510,7 +1492,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
- github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
- github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
- github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
--github.com/zenazn/goji v0.9.1-0.20160507202103-64eb34159fe5/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
- github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
- github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
- gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE=
-@@ -1619,7 +1600,6 @@ golang.org/x/exp v0.0.0-20200821190819-94841d0725da/go.mod h1:3jZMyOhIsHpP37uCMk
- golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
- golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
- golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
--golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
- golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
- golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
- golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-@@ -1766,7 +1746,6 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w
- golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
--golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-@@ -1876,8 +1855,6 @@ golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgw
- golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
- golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
- golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
--golang.org/x/tools v0.0.0-20190802220118-1d1727260058/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
--golang.org/x/tools v0.0.0-20190805222050-c5a2fd39b72a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
- golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-@@ -1933,7 +1910,6 @@ golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4f
- golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
--golang.org/x/tools v0.0.0-20201226215659-b1c90890d22a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-@@ -2120,9 +2096,6 @@ gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv
- gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
- gopkg.in/ldap.v3 v3.0.2 h1:R6RBtabK6e1GO0eQKtkyOFbAHO73QesLzI2w2DZ6b9w=
- gopkg.in/ldap.v3 v3.0.2/go.mod h1:oxD7NyBuxchC+SgJDE1Q5Od05eGt29SDQVBmV+HYbzw=
--gopkg.in/macaron.v1 v1.3.4/go.mod h1:/RoHTdC8ALpyJ3+QR36mKjwnT1F1dyYtsGM9Ate6ZFI=
--gopkg.in/macaron.v1 v1.4.0 h1:RJHC09fAnQ8tuGUiZNjG0uyL1BWSdSWd9SpufIcEArQ=
--gopkg.in/macaron.v1 v1.4.0/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4=
- gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
- gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
- gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
-@@ -2151,7 +2124,6 @@ gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8/go.mod h1:K4uyk7z7BCEPqu6E+C
- gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
--gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
- gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
- gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
- honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-diff --git a/pkg/extensions/main.go b/pkg/extensions/main.go
-index 24031ace2e..081475fc89 100644
---- a/pkg/extensions/main.go
-+++ b/pkg/extensions/main.go
-@@ -6,14 +6,12 @@ import (
- 
- 	_ "github.com/beevik/etree"
- 	_ "github.com/cortexproject/cortex/pkg/util"
--	_ "github.com/crewjam/saml"
- 	_ "github.com/gobwas/glob"
- 	"github.com/grafana/grafana/pkg/registry"
- 	"github.com/grafana/grafana/pkg/services/licensing"
- 	"github.com/grafana/grafana/pkg/services/validations"
- 	_ "github.com/grafana/loki/pkg/logproto"
- 	_ "github.com/grpc-ecosystem/go-grpc-middleware"
--	_ "github.com/jung-kurt/gofpdf"
- 	_ "github.com/linkedin/goavro/v2"
- 	_ "github.com/pkg/errors"
- 	_ "github.com/robfig/cron"
diff --git a/SOURCES/006-fix-gtime-test-32bit.patch b/SOURCES/006-fix-gtime-test-32bit.patch
deleted file mode 100644
index c38a50f..0000000
--- a/SOURCES/006-fix-gtime-test-32bit.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/pkg/components/gtime/gtime_test.go b/pkg/components/gtime/gtime_test.go
-index 0b1b23a1db..eb9fe718c7 100644
---- a/pkg/components/gtime/gtime_test.go
-+++ b/pkg/components/gtime/gtime_test.go
-@@ -20,9 +20,9 @@ func TestParseInterval(t *testing.T) {
- 		{inp: "1d", duration: 24 * time.Hour},
- 		{inp: "1w", duration: 168 * time.Hour},
- 		{inp: "2w", duration: 2 * 168 * time.Hour},
--		{inp: "1M", duration: time.Duration(daysInMonth * 24 * int(time.Hour))},
--		{inp: "1y", duration: time.Duration(daysInYear * 24 * int(time.Hour))},
--		{inp: "5y", duration: time.Duration(calculateDays5y() * 24 * int(time.Hour))},
-+		{inp: "1M", duration: time.Duration(int64(daysInMonth) * 24 * int64(time.Hour))},
-+		{inp: "1y", duration: time.Duration(int64(daysInYear) * 24 * int64(time.Hour))},
-+		{inp: "5y", duration: time.Duration(int64(calculateDays5y()) * 24 * int64(time.Hour))},
- 		{inp: "invalid-duration", err: regexp.MustCompile(`^time: invalid duration "?invalid-duration"?$`)},
- 	}
- 	for i, tc := range tcs {
diff --git a/SOURCES/008-remove-unused-frontend-crypto.patch b/SOURCES/008-remove-unused-frontend-crypto.patch
deleted file mode 100644
index d430e10..0000000
--- a/SOURCES/008-remove-unused-frontend-crypto.patch
+++ /dev/null
@@ -1,752 +0,0 @@
-From 3aed20dfb829f396403bae154cb4fcc0bb586966 Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 18:42:31 +0200
-Subject: [PATCH] remove unused frontend crypto
-
-
-diff --git a/package.json b/package.json
-index f859115e8d..831586ad88 100644
---- a/package.json
-+++ b/package.json
-@@ -294,6 +294,9 @@
-     "whatwg-fetch": "3.1.0"
-   },
-   "resolutions": {
-+    "crypto-browserify": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz",
-+    "selfsigned": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz",
-+    "http-signature": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz",
-     "caniuse-db": "1.0.30000772",
-     "react-use-measure": "https://github.com/mckn/react-use-measure.git#remove-cjs-export"
-   },
-diff --git a/scripts/webpack/webpack.common.js b/scripts/webpack/webpack.common.js
-index 3e56d31c37..a03ed1a67a 100644
---- a/scripts/webpack/webpack.common.js
-+++ b/scripts/webpack/webpack.common.js
-@@ -66,6 +66,7 @@ module.exports = {
-   },
-   node: {
-     fs: 'empty',
-+    crypto: false,
-   },
-   plugins: [
-     new MonacoWebpackPlugin({
-diff --git a/yarn.lock b/yarn.lock
-index c17e6153be..3f5e5b80d6 100644
---- a/yarn.lock
-+++ b/yarn.lock
-@@ -8301,27 +8301,6 @@ asap@~1.0.0:
-   resolved "https://registry.yarnpkg.com/asap/-/asap-1.0.0.tgz#b2a45da5fdfa20b0496fc3768cc27c12fa916a7d"
-   integrity sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=
- 
--asn1.js@^4.0.0:
--  version "4.10.1"
--  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
--  integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
--  dependencies:
--    bn.js "^4.0.0"
--    inherits "^2.0.1"
--    minimalistic-assert "^1.0.0"
--
--asn1@~0.2.3:
--  version "0.2.4"
--  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
--  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
--  dependencies:
--    safer-buffer "~2.1.0"
--
--assert-plus@1.0.0, assert-plus@^1.0.0:
--  version "1.0.0"
--  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
--  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
--
- assert@^1.1.1:
-   version "1.5.0"
-   resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
-@@ -8936,13 +8915,6 @@ batch@0.6.1:
-   resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
-   integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
- 
--bcrypt-pbkdf@^1.0.0:
--  version "1.0.2"
--  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
--  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
--  dependencies:
--    tweetnacl "^0.14.3"
--
- before-after-hook@^2.0.0:
-   version "2.1.0"
-   resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
-@@ -9009,11 +8981,6 @@ bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.7.2:
-   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
-   integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
- 
--bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
--  version "4.11.9"
--  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
--  integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
--
- body-parser@1.19.0:
-   version "1.19.0"
-   resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
-@@ -9115,11 +9082,6 @@ braces@^3.0.1, braces@~3.0.2:
-   dependencies:
-     fill-range "^7.0.1"
- 
--brorand@^1.0.1:
--  version "1.1.0"
--  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
--  integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
--
- browser-process-hrtime@^0.1.2:
-   version "0.1.3"
-   resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
-@@ -9135,58 +9097,6 @@ browser-stdout@1.3.1:
-   resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
-   integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
- 
--browserify-aes@^1.0.0, browserify-aes@^1.0.4:
--  version "1.2.0"
--  resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
--  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
--  dependencies:
--    buffer-xor "^1.0.3"
--    cipher-base "^1.0.0"
--    create-hash "^1.1.0"
--    evp_bytestokey "^1.0.3"
--    inherits "^2.0.1"
--    safe-buffer "^5.0.1"
--
--browserify-cipher@^1.0.0:
--  version "1.0.1"
--  resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
--  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
--  dependencies:
--    browserify-aes "^1.0.4"
--    browserify-des "^1.0.0"
--    evp_bytestokey "^1.0.0"
--
--browserify-des@^1.0.0:
--  version "1.0.2"
--  resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
--  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
--  dependencies:
--    cipher-base "^1.0.1"
--    des.js "^1.0.0"
--    inherits "^2.0.1"
--    safe-buffer "^5.1.2"
--
--browserify-rsa@^4.0.0:
--  version "4.0.1"
--  resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
--  integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
--  dependencies:
--    bn.js "^4.1.0"
--    randombytes "^2.0.1"
--
--browserify-sign@^4.0.0:
--  version "4.0.4"
--  resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
--  integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
--  dependencies:
--    bn.js "^4.1.1"
--    browserify-rsa "^4.0.0"
--    create-hash "^1.1.0"
--    create-hmac "^1.1.2"
--    elliptic "^6.0.0"
--    inherits "^2.0.1"
--    parse-asn1 "^5.0.0"
--
- browserify-zlib@^0.2.0:
-   version "0.2.0"
-   resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
-@@ -9259,11 +9169,6 @@ buffer-indexof@^1.0.0:
-   resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
-   integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
- 
--buffer-xor@^1.0.3:
--  version "1.0.3"
--  resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
--  integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
--
- buffer@^4.3.0:
-   version "4.9.1"
-   resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
-@@ -9566,17 +9471,7 @@ caniuse-db@1.0.30000772:
-   resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000772.tgz#51aae891768286eade4a3d8319ea76d6a01b512b"
-   integrity sha1-UarokXaChureSj2DGep21qAbUSs=
- 
--caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001173:
--  version "1.0.30001299"
--  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz"
--  integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==
--
--caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001093:
--  version "1.0.30001299"
--  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz"
--  integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==
--
--caniuse-lite@^1.0.30001109:
-+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001173:
-   version "1.0.30001299"
-   resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz"
-   integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==
-@@ -9819,14 +9714,6 @@ ci-info@^2.0.0:
-   resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
-   integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
- 
--cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
--  version "1.0.4"
--  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
--  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
--  dependencies:
--    inherits "^2.0.1"
--    safe-buffer "^5.0.1"
--
- circular-json@^0.3.1:
-   version "0.3.3"
-   resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
-@@ -10562,7 +10449,7 @@ core-js@^3.0.1, core-js@^3.0.4, core-js@^3.6.5:
-   resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0"
-   integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==
- 
--core-util-is@1.0.2, core-util-is@~1.0.0:
-+core-util-is@~1.0.0:
-   version "1.0.2"
-   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-@@ -10613,14 +10500,6 @@ cpy@^8.1.1:
-     p-filter "^2.1.0"
-     p-map "^3.0.0"
- 
--create-ecdh@^4.0.0:
--  version "4.0.3"
--  resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
--  integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
--  dependencies:
--    bn.js "^4.1.0"
--    elliptic "^6.0.0"
--
- create-emotion@^10.0.27:
-   version "10.0.27"
-   resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503"
-@@ -10638,29 +10517,6 @@ create-error-class@^3.0.0:
-   dependencies:
-     capture-stack-trace "^1.0.0"
- 
--create-hash@^1.1.0, create-hash@^1.1.2:
--  version "1.2.0"
--  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
--  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
--  dependencies:
--    cipher-base "^1.0.1"
--    inherits "^2.0.1"
--    md5.js "^1.3.4"
--    ripemd160 "^2.0.1"
--    sha.js "^2.4.0"
--
--create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
--  version "1.1.7"
--  resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
--  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
--  dependencies:
--    cipher-base "^1.0.3"
--    create-hash "^1.1.0"
--    inherits "^2.0.1"
--    ripemd160 "^2.0.0"
--    safe-buffer "^5.0.1"
--    sha.js "^2.4.8"
--
- create-react-context@0.3.0:
-   version "0.3.0"
-   resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
-@@ -10712,22 +10568,9 @@ crypt@~0.0.1:
-   resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
-   integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
- 
--crypto-browserify@^3.11.0:
--  version "3.12.0"
--  resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
--  integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
--  dependencies:
--    browserify-cipher "^1.0.0"
--    browserify-sign "^4.0.0"
--    create-ecdh "^4.0.0"
--    create-hash "^1.1.0"
--    create-hmac "^1.1.0"
--    diffie-hellman "^5.0.0"
--    inherits "^2.0.1"
--    pbkdf2 "^3.0.3"
--    public-encrypt "^4.0.0"
--    randombytes "^2.0.0"
--    randomfill "^1.0.3"
-+crypto-browserify@^3.11.0, "crypto-browserify@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz", "http-signature@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz", http-signature@~1.2.0, selfsigned@^1.10.8, "selfsigned@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz":
-+  version "1.1.1"
-+  resolved "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz#f8cae15d883ffc0abc663b5eaaa711fcc64bb5c2"
- 
- crypto-random-string@^1.0.0:
-   version "1.0.0"
-@@ -11450,13 +11293,6 @@ dargs@^4.0.1:
-   dependencies:
-     number-is-nan "^1.0.0"
- 
--dashdash@^1.12.0:
--  version "1.14.1"
--  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
--  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
--  dependencies:
--    assert-plus "^1.0.0"
--
- data-urls@^1.1.0:
-   version "1.1.0"
-   resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
-@@ -11709,14 +11545,6 @@ deprecation@^2.0.0, deprecation@^2.3.1:
-   resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
-   integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
- 
--des.js@^1.0.0:
--  version "1.0.0"
--  resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
--  integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
--  dependencies:
--    inherits "^2.0.1"
--    minimalistic-assert "^1.0.0"
--
- destroy@~1.0.4:
-   version "1.0.4"
-   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-@@ -11808,15 +11636,6 @@ diff@^4.0.2:
-   resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
-   integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
- 
--diffie-hellman@^5.0.0:
--  version "5.0.3"
--  resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
--  integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
--  dependencies:
--    bn.js "^4.1.0"
--    miller-rabin "^4.0.0"
--    randombytes "^2.0.0"
--
- dir-glob@2.0.0:
-   version "2.0.0"
-   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
-@@ -12084,14 +11903,6 @@ eastasianwidth@^0.2.0:
-   resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
-   integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
- 
--ecc-jsbn@~0.1.1:
--  version "0.1.2"
--  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
--  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
--  dependencies:
--    jsbn "~0.1.0"
--    safer-buffer "^2.1.0"
--
- ee-first@1.1.1:
-   version "1.1.1"
-   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-@@ -12136,19 +11947,6 @@ element-resize-detector@^1.2.1:
-   dependencies:
-     batch-processor "1.0.0"
- 
--elliptic@^6.0.0:
--  version "6.5.3"
--  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
--  integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
--  dependencies:
--    bn.js "^4.4.0"
--    brorand "^1.0.1"
--    hash.js "^1.0.0"
--    hmac-drbg "^1.0.0"
--    inherits "^2.0.1"
--    minimalistic-assert "^1.0.0"
--    minimalistic-crypto-utils "^1.0.0"
--
- emitter-component@^1.1.1:
-   version "1.1.1"
-   resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.1.tgz#065e2dbed6959bf470679edabeaf7981d1003ab6"
-@@ -13033,14 +12831,6 @@ eventsource@^1.0.7:
-   dependencies:
-     original "^1.0.0"
- 
--evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
--  version "1.0.3"
--  resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
--  integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
--  dependencies:
--    md5.js "^1.3.4"
--    safe-buffer "^5.1.1"
--
- exec-sh@^0.3.2:
-   version "0.3.2"
-   resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
-@@ -13311,16 +13101,6 @@ extract-zip@^1.7.0:
-     mkdirp "^0.5.4"
-     yauzl "^2.10.0"
- 
--extsprintf@1.3.0:
--  version "1.3.0"
--  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
--  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
--
--extsprintf@^1.2.0:
--  version "1.4.0"
--  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
--  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
--
- fast-deep-equal@^2.0.1:
-   version "2.0.1"
-   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
-@@ -14177,13 +13957,6 @@ getos@^3.2.1:
-   dependencies:
-     async "^3.2.0"
- 
--getpass@^0.1.1:
--  version "0.1.7"
--  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
--  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
--  dependencies:
--    assert-plus "^1.0.0"
--
- git-raw-commits@2.0.0:
-   version "2.0.0"
-   resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
-@@ -14685,22 +14458,6 @@ has@^1.0.0, has@^1.0.1, has@^1.0.3:
-   dependencies:
-     function-bind "^1.1.1"
- 
--hash-base@^3.0.0:
--  version "3.0.4"
--  resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
--  integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
--  dependencies:
--    inherits "^2.0.1"
--    safe-buffer "^5.0.1"
--
--hash.js@^1.0.0, hash.js@^1.0.3:
--  version "1.1.7"
--  resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
--  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
--  dependencies:
--    inherits "^2.0.3"
--    minimalistic-assert "^1.0.1"
--
- hast-to-hyperscript@^9.0.0:
-   version "9.0.1"
-   resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d"
-@@ -14789,15 +14546,6 @@ highlight.js@^10.1.1, highlight.js@~10.5.0:
-   resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.5.0.tgz#3f09fede6a865757378f2d9ebdcbc15ba268f98f"
-   integrity sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==
- 
--hmac-drbg@^1.0.0:
--  version "1.0.1"
--  resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
--  integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
--  dependencies:
--    hash.js "^1.0.3"
--    minimalistic-assert "^1.0.0"
--    minimalistic-crypto-utils "^1.0.1"
--
- hoist-non-react-statics@3.3.2, hoist-non-react-statics@^3.3.2:
-   version "3.3.2"
-   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
-@@ -15075,15 +14823,6 @@ http-proxy@^1.17.0:
-     follow-redirects "^1.0.0"
-     requires-port "^1.0.0"
- 
--http-signature@~1.2.0:
--  version "1.2.0"
--  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
--  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
--  dependencies:
--    assert-plus "^1.0.0"
--    jsprim "^1.2.2"
--    sshpk "^1.7.0"
--
- https-browserify@^1.0.0:
-   version "1.0.0"
-   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
-@@ -16868,11 +16607,6 @@ js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4,
-     argparse "^1.0.7"
-     esprima "^4.0.0"
- 
--jsbn@~0.1.0:
--  version "0.1.1"
--  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
--  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
--
- jsdoctypeparser@^9.0.0:
-   version "9.0.0"
-   resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26"
-@@ -16982,11 +16716,6 @@ json-schema-traverse@^1.0.0:
-   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
-   integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
- 
--json-schema@0.2.3:
--  version "0.2.3"
--  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
--  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
--
- json-stable-stringify-without-jsonify@^1.0.1:
-   version "1.0.1"
-   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-@@ -17087,16 +16816,6 @@ jsonpointer@^4.0.0:
-   resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-   integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
- 
--jsprim@^1.2.2:
--  version "1.4.1"
--  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
--  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
--  dependencies:
--    assert-plus "1.0.0"
--    extsprintf "1.3.0"
--    json-schema "0.2.3"
--    verror "1.10.0"
--
- jsurl@^0.1.5:
-   version "0.1.5"
-   resolved "https://registry.yarnpkg.com/jsurl/-/jsurl-0.1.5.tgz#2a5c8741de39cacafc12f448908bf34e960dcee8"
-@@ -17886,15 +17605,6 @@ md5-file@^4.0.0:
-   resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-4.0.0.tgz#f3f7ba1e2dd1144d5bf1de698d0e5f44a4409584"
-   integrity sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==
- 
--md5.js@^1.3.4:
--  version "1.3.5"
--  resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
--  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
--  dependencies:
--    hash-base "^3.0.0"
--    inherits "^2.0.1"
--    safe-buffer "^5.1.2"
--
- md5@^2.2.1:
-   version "2.2.1"
-   resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
-@@ -18123,14 +17833,6 @@ micromatch@^4.0.0, micromatch@^4.0.2:
-     braces "^3.0.1"
-     picomatch "^2.0.5"
- 
--miller-rabin@^4.0.0:
--  version "4.0.1"
--  resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
--  integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
--  dependencies:
--    bn.js "^4.0.0"
--    brorand "^1.0.1"
--
- mime-db@1.40.0:
-   version "1.40.0"
-   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
-@@ -18217,16 +17919,11 @@ mini-svg-data-uri@^1.1.3:
-   resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.1.3.tgz#9759ee5f4d89a4b724d089ce52eab4b623bfbc88"
-   integrity sha512-EeKOmdzekjdPe53/GdxmUpNgDQFkNeSte6XkJmOBt4BfWL6FQ9G9RtLNh+JMjFS3LhdpSICMIkZdznjiecASHQ==
- 
--minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
-+minimalistic-assert@^1.0.0:
-   version "1.0.1"
-   resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
-   integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
- 
--minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
--  version "1.0.1"
--  resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
--  integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
--
- minimatch@3.0.3:
-   version "3.0.3"
-   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
-@@ -18749,11 +18446,6 @@ node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1:
-   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
-   integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
- 
--node-forge@^0.10.0:
--  version "0.10.0"
--  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
--  integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
--
- node-gyp@^5.0.2:
-   version "5.1.1"
-   resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e"
-@@ -19671,18 +19363,6 @@ parent-module@^1.0.0:
-   dependencies:
-     callsites "^3.0.0"
- 
--parse-asn1@^5.0.0:
--  version "5.1.5"
--  resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
--  integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
--  dependencies:
--    asn1.js "^4.0.0"
--    browserify-aes "^1.0.0"
--    create-hash "^1.1.0"
--    evp_bytestokey "^1.0.0"
--    pbkdf2 "^3.0.3"
--    safe-buffer "^5.1.1"
--
- parse-entities@^2.0.0:
-   version "2.0.0"
-   resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
-@@ -19875,17 +19555,6 @@ path-type@^4.0.0:
-   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
-   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
- 
--pbkdf2@^3.0.3:
--  version "3.0.17"
--  resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
--  integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
--  dependencies:
--    create-hash "^1.1.2"
--    create-hmac "^1.1.4"
--    ripemd160 "^2.0.1"
--    safe-buffer "^5.0.1"
--    sha.js "^2.4.8"
--
- pend@~1.2.0:
-   version "1.2.0"
-   resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-@@ -21143,18 +20812,6 @@ pstree.remy@^1.1.7:
-   resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
-   integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
- 
--public-encrypt@^4.0.0:
--  version "4.0.3"
--  resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
--  integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
--  dependencies:
--    bn.js "^4.1.0"
--    browserify-rsa "^4.0.0"
--    create-hash "^1.1.0"
--    parse-asn1 "^5.0.0"
--    randombytes "^2.0.1"
--    safe-buffer "^5.1.2"
--
- pump@^2.0.0:
-   version "2.0.1"
-   resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
-@@ -21306,21 +20963,13 @@ randexp@0.4.6:
-     discontinuous-range "1.0.0"
-     ret "~0.1.10"
- 
--randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
-+randombytes@^2.1.0:
-   version "2.1.0"
-   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
-   integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
-   dependencies:
-     safe-buffer "^5.1.0"
- 
--randomfill@^1.0.3:
--  version "1.0.4"
--  resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
--  integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
--  dependencies:
--    randombytes "^2.0.5"
--    safe-buffer "^5.1.0"
--
- range-parser@^1.2.1, range-parser@~1.2.1:
-   version "1.2.1"
-   resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
-@@ -23056,14 +22705,6 @@ rimraf@~2.6.2:
-   dependencies:
-     glob "^7.1.3"
- 
--ripemd160@^2.0.0, ripemd160@^2.0.1:
--  version "2.0.2"
--  resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
--  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
--  dependencies:
--    hash-base "^3.0.0"
--    inherits "^2.0.1"
--
- rollup-plugin-copy@3.3.0:
-   version "3.3.0"
-   resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.3.0.tgz#5ba230047f86b9f703a29288f242948a5580e7b9"
-@@ -23248,7 +22889,7 @@ safe-regex@^1.1.0:
-   dependencies:
-     ret "~0.1.10"
- 
--"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
-+"safer-buffer@>= 2.1.2 < 3":
-   version "2.1.2"
-   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-@@ -23442,13 +23083,6 @@ selection-is-backward@^1.0.0:
-   resolved "https://registry.yarnpkg.com/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1"
-   integrity sha1-l6VGMxiKURq6ZBn8XB+pG0Z+a+E=
- 
--selfsigned@^1.10.8:
--  version "1.10.8"
--  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30"
--  integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==
--  dependencies:
--    node-forge "^0.10.0"
--
- semver-compare@^1.0.0:
-   version "1.0.0"
-   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
-@@ -23590,14 +23224,6 @@ setprototypeof@1.1.1:
-   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
-   integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
- 
--sha.js@^2.4.0, sha.js@^2.4.8:
--  version "2.4.11"
--  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
--  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
--  dependencies:
--    inherits "^2.0.1"
--    safe-buffer "^5.0.1"
--
- shallow-clone@^3.0.0:
-   version "3.0.1"
-   resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
-@@ -24063,21 +23689,6 @@ sprintf-js@~1.0.2:
-   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
- 
--sshpk@^1.7.0:
--  version "1.16.1"
--  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
--  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
--  dependencies:
--    asn1 "~0.2.3"
--    assert-plus "^1.0.0"
--    bcrypt-pbkdf "^1.0.0"
--    dashdash "^1.12.0"
--    ecc-jsbn "~0.1.1"
--    getpass "^0.1.1"
--    jsbn "~0.1.0"
--    safer-buffer "^2.0.2"
--    tweetnacl "~0.14.0"
--
- ssri@^6.0.0, ssri@^6.0.1:
-   version "6.0.1"
-   resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
-@@ -25342,11 +24953,6 @@ tween-functions@^1.2.0:
-   resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff"
-   integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8=
- 
--tweetnacl@^0.14.3, tweetnacl@~0.14.0:
--  version "0.14.5"
--  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
--  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
--
- type-check@^0.4.0, type-check@~0.4.0:
-   version "0.4.0"
-   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
-@@ -25954,15 +25560,6 @@ vendors@^1.0.0:
-   resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
-   integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
- 
--verror@1.10.0:
--  version "1.10.0"
--  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
--  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
--  dependencies:
--    assert-plus "^1.0.0"
--    core-util-is "1.0.2"
--    extsprintf "^1.2.0"
--
- vfile-location@^3.0.0, vfile-location@^3.2.0:
-   version "3.2.0"
-   resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
diff --git a/SOURCES/009-patch-unused-backend-crypto.patch b/SOURCES/009-patch-unused-backend-crypto.patch
deleted file mode 100644
index 12be571..0000000
--- a/SOURCES/009-patch-unused-backend-crypto.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go
-new file mode 100644
-index 0000000..871e612
---- /dev/null
-+++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go
-@@ -0,0 +1,25 @@
-+package elgamal
-+
-+import (
-+	"io"
-+	"math/big"
-+)
-+
-+// PublicKey represents an ElGamal public key.
-+type PublicKey struct {
-+	G, P, Y *big.Int
-+}
-+
-+// PrivateKey represents an ElGamal private key.
-+type PrivateKey struct {
-+	PublicKey
-+	X *big.Int
-+}
-+
-+func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) {
-+	panic("ElGamal encryption not available")
-+}
-+
-+func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) {
-+	panic("ElGamal encryption not available")
-+}
-diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
-index 9728d61..9f04c2d 100644
---- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go
-+++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
-@@ -16,7 +16,6 @@ import (
- 	"math/big"
- 	"math/bits"
- 
--	"golang.org/x/crypto/cast5"
- 	"golang.org/x/crypto/openpgp/errors"
- )
- 
-@@ -487,7 +486,7 @@ func (cipher CipherFunction) KeySize() int {
- 	case Cipher3DES:
- 		return 24
- 	case CipherCAST5:
--		return cast5.KeySize
-+		panic("cast5 cipher not available")
- 	case CipherAES128:
- 		return 16
- 	case CipherAES192:
-@@ -517,7 +516,7 @@ func (cipher CipherFunction) new(key []byte) (block cipher.Block) {
- 	case Cipher3DES:
- 		block, _ = des.NewTripleDESCipher(key)
- 	case CipherCAST5:
--		block, _ = cast5.NewCipher(key)
-+		panic("cast5 cipher not available")
- 	case CipherAES128, CipherAES192, CipherAES256:
- 		block, _ = aes.NewCipher(key)
- 	}
-diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
-index 6126030..3a54c5f 100644
---- a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
-+++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
-@@ -5,13 +5,12 @@
- package packet
- 
- import (
--	"crypto/cipher"
- 	"crypto/sha1"
- 	"crypto/subtle"
--	"golang.org/x/crypto/openpgp/errors"
- 	"hash"
- 	"io"
--	"strconv"
-+
-+	"golang.org/x/crypto/openpgp/errors"
- )
- 
- // SymmetricallyEncrypted represents a symmetrically encrypted byte string. The
-@@ -45,46 +44,7 @@ func (se *SymmetricallyEncrypted) parse(r io.Reader) error {
- // packet can be read. An incorrect key can, with high probability, be detected
- // immediately and this will result in a KeyIncorrect error being returned.
- func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) {
--	keySize := c.KeySize()
--	if keySize == 0 {
--		return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c)))
--	}
--	if len(key) != keySize {
--		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length")
--	}
--
--	if se.prefix == nil {
--		se.prefix = make([]byte, c.blockSize()+2)
--		_, err := readFull(se.contents, se.prefix)
--		if err != nil {
--			return nil, err
--		}
--	} else if len(se.prefix) != c.blockSize()+2 {
--		return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths")
--	}
--
--	ocfbResync := OCFBResync
--	if se.MDC {
--		// MDC packets use a different form of OCFB mode.
--		ocfbResync = OCFBNoResync
--	}
--
--	s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync)
--	if s == nil {
--		return nil, errors.ErrKeyIncorrect
--	}
--
--	plaintext := cipher.StreamReader{S: s, R: se.contents}
--
--	if se.MDC {
--		// MDC packets have an embedded hash that we need to check.
--		h := sha1.New()
--		h.Write(se.prefix)
--		return &seMDCReader{in: plaintext, h: h}, nil
--	}
--
--	// Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser.
--	return seReader{plaintext}, nil
-+	panic("OCFB cipher not available")
- }
- 
- // seReader wraps an io.Reader with a no-op Close method.
-@@ -254,37 +214,5 @@ func (c noOpCloser) Close() error {
- // written.
- // If config is nil, sensible defaults will be used.
- func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) {
--	if c.KeySize() != len(key) {
--		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length")
--	}
--	writeCloser := noOpCloser{w}
--	ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC)
--	if err != nil {
--		return
--	}
--
--	_, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion})
--	if err != nil {
--		return
--	}
--
--	block := c.new(key)
--	blockSize := block.BlockSize()
--	iv := make([]byte, blockSize)
--	_, err = config.Random().Read(iv)
--	if err != nil {
--		return
--	}
--	s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync)
--	_, err = ciphertext.Write(prefix)
--	if err != nil {
--		return
--	}
--	plaintext := cipher.StreamWriter{S: s, W: ciphertext}
--
--	h := sha1.New()
--	h.Write(iv)
--	h.Write(iv[blockSize-2:])
--	contents = &seMDCWriter{w: plaintext, h: h}
--	return
-+	panic("OCFB cipher not available")
- }
diff --git a/SOURCES/010-fips.patch b/SOURCES/010-fips.patch
deleted file mode 100644
index f9adee9..0000000
--- a/SOURCES/010-fips.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-diff --git a/vendor/golang.org/x/crypto/internal/boring/boring.go b/vendor/golang.org/x/crypto/internal/boring/boring.go
-new file mode 100644
-index 0000000..a9c550e
---- /dev/null
-+++ b/vendor/golang.org/x/crypto/internal/boring/boring.go
-@@ -0,0 +1,74 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Copyright 2021 Red Hat.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build linux
-+// +build !android
-+// +build !no_openssl
-+// +build !cmd_go_bootstrap
-+// +build !msan
-+
-+package boring
-+
-+// #include "openssl_pbkdf2.h"
-+// #cgo LDFLAGS: -ldl
-+import "C"
-+import (
-+	"bytes"
-+	"crypto/sha1"
-+	"crypto/sha256"
-+	"hash"
-+	"unsafe"
-+)
-+
-+var (
-+	emptySha1   = sha1.Sum([]byte{})
-+	emptySha256 = sha256.Sum256([]byte{})
-+)
-+
-+func hashToMD(h hash.Hash) *C.GO_EVP_MD {
-+	emptyHash := h.Sum([]byte{})
-+
-+	switch {
-+	case bytes.Equal(emptyHash, emptySha1[:]):
-+		return C._goboringcrypto_EVP_sha1()
-+	case bytes.Equal(emptyHash, emptySha256[:]):
-+		return C._goboringcrypto_EVP_sha256()
-+	}
-+	return nil
-+}
-+
-+// charptr returns the address of the underlying array in b,
-+// being careful not to panic when b has zero length.
-+func charptr(b []byte) *C.char {
-+	if len(b) == 0 {
-+		return nil
-+	}
-+	return (*C.char)(unsafe.Pointer(&b[0]))
-+}
-+
-+// ucharptr returns the address of the underlying array in b,
-+// being careful not to panic when b has zero length.
-+func ucharptr(b []byte) *C.uchar {
-+	if len(b) == 0 {
-+		return nil
-+	}
-+	return (*C.uchar)(unsafe.Pointer(&b[0]))
-+}
-+
-+func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
-+	// println("[debug] using pbkdf2 from OpenSSL")
-+	ch := h()
-+	md := hashToMD(ch)
-+	if md == nil {
-+		return nil
-+	}
-+
-+	out := make([]byte, keyLen)
-+	ok := C._goboringcrypto_PKCS5_PBKDF2_HMAC(charptr(password), C.int(len(password)), ucharptr(salt), C.int(len(salt)), C.int(iter), md, C.int(keyLen), ucharptr(out))
-+	if ok != 1 {
-+		panic("boringcrypto: PKCS5_PBKDF2_HMAC failed")
-+	}
-+	return out
-+}
-diff --git a/vendor/golang.org/x/crypto/internal/boring/notboring.go b/vendor/golang.org/x/crypto/internal/boring/notboring.go
-new file mode 100644
-index 0000000..e244fb5
---- /dev/null
-+++ b/vendor/golang.org/x/crypto/internal/boring/notboring.go
-@@ -0,0 +1,16 @@
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Copyright 2021 Red Hat.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+// +build !linux !cgo android cmd_go_bootstrap msan no_openssl
-+
-+package boring
-+
-+import (
-+	"hash"
-+)
-+
-+func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
-+	panic("boringcrypto: not available")
-+}
-diff --git a/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h
-new file mode 100644
-index 0000000..6dfdf10
---- /dev/null
-+++ b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h
-@@ -0,0 +1,5 @@
-+#include "/usr/lib/golang/src/crypto/internal/boring/goboringcrypto.h"
-+
-+DEFINEFUNC(int, PKCS5_PBKDF2_HMAC,
-+    (const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, EVP_MD *digest, int keylen, unsigned char *out),
-+    (pass, passlen, salt, saltlen, iter, digest, keylen, out))
-diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
-index 593f653..799a611 100644
---- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
-+++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
-@@ -19,8 +19,11 @@ pbkdf2.Key.
- package pbkdf2 // import "golang.org/x/crypto/pbkdf2"
- 
- import (
-+	"crypto/boring"
- 	"crypto/hmac"
- 	"hash"
-+
-+	xboring "golang.org/x/crypto/internal/boring"
- )
- 
- // Key derives a key from the password, salt and iteration count, returning a
-@@ -40,6 +43,10 @@ import (
- // Using a higher iteration count will increase the cost of an exhaustive
- // search but will also make derivation proportionally slower.
- func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
-+	if boring.Enabled() {
-+		return xboring.Pbkdf2Key(password, salt, iter, keyLen, h)
-+	}
-+
- 	prf := hmac.New(h, password)
- 	hashLen := prf.Size()
- 	numBlocks := (keyLen + hashLen - 1) / hashLen
diff --git a/SOURCES/011-use-hmac-sha-256-for-password-reset-tokens.patch b/SOURCES/011-use-hmac-sha-256-for-password-reset-tokens.patch
deleted file mode 100644
index 91b6b46..0000000
--- a/SOURCES/011-use-hmac-sha-256-for-password-reset-tokens.patch
+++ /dev/null
@@ -1,353 +0,0 @@
-commit f13c08e9f45d7776cb264b17ec41bc4ff51fc0b9
-Author: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date:   Thu Nov 25 18:49:52 2021 +0100
-
-    notifications: use HMAC-SHA256 to generate time limit codes
-    
-    * changes the time limit code generation function to use HMAC-SHA256
-      instead of SHA-1
-    * multiple new testcases
-
-diff --git a/pkg/services/notifications/codes.go b/pkg/services/notifications/codes.go
-index ea9beb30cc..1ddf05dc69 100644
---- a/pkg/services/notifications/codes.go
-+++ b/pkg/services/notifications/codes.go
-@@ -1,48 +1,53 @@
- package notifications
- 
- import (
--	"crypto/sha1" // #nosec
-+	"crypto/hmac"
-+	"crypto/sha256"
- 	"encoding/hex"
- 	"fmt"
-+	"strconv"
- 	"time"
- 
--	"github.com/unknwon/com"
--
- 	"github.com/grafana/grafana/pkg/models"
- 	"github.com/grafana/grafana/pkg/setting"
- )
- 
--const timeLimitCodeLength = 12 + 6 + 40
-+const timeLimitStartDateLength = 12
-+const timeLimitMinutesLength = 6
-+const timeLimitHmacLength = 64
-+const timeLimitCodeLength = timeLimitStartDateLength + timeLimitMinutesLength + timeLimitHmacLength
- 
- // create a time limit code
--// code format: 12 length date time string + 6 minutes string + 40 sha1 encoded string
--func createTimeLimitCode(data string, minutes int, startInf interface{}) (string, error) {
-+// code format: 12 length date time string + 6 minutes string + 64 HMAC-SHA256 encoded string
-+func createTimeLimitCode(payload string, minutes int, startStr string) (string, error) {
- 	format := "200601021504"
- 
- 	var start, end time.Time
--	var startStr, endStr string
-+	var endStr string
- 
--	if startInf == nil {
-+	if startStr == "" {
- 		// Use now time create code
- 		start = time.Now()
- 		startStr = start.Format(format)
- 	} else {
- 		// use start string create code
--		startStr = startInf.(string)
--		start, _ = time.ParseInLocation(format, startStr, time.Local)
--		startStr = start.Format(format)
-+		var err error
-+		start, err = time.ParseInLocation(format, startStr, time.Local)
-+		if err != nil {
-+			return "", err
-+		}
- 	}
- 
- 	end = start.Add(time.Minute * time.Duration(minutes))
- 	endStr = end.Format(format)
- 
--	// create sha1 encode string
--	sh := sha1.New()
--	if _, err := sh.Write([]byte(data + setting.SecretKey + startStr + endStr +
--		com.ToStr(minutes))); err != nil {
--		return "", err
-+	// create HMAC-SHA256 encoded string
-+	key := []byte(setting.SecretKey)
-+	h := hmac.New(sha256.New, key)
-+	if _, err := h.Write([]byte(payload + startStr + endStr)); err != nil {
-+		return "", fmt.Errorf("cannot create hmac: %v", err)
- 	}
--	encoded := hex.EncodeToString(sh.Sum(nil))
-+	encoded := hex.EncodeToString(h.Sum(nil))
- 
- 	code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded)
- 	return code, nil
-@@ -50,30 +55,29 @@ func createTimeLimitCode(data string, minutes int, startInf interface{}) (string
- 
- // verify time limit code
- func validateUserEmailCode(user *models.User, code string) (bool, error) {
--	if len(code) <= 18 {
-+	if len(code) < timeLimitCodeLength {
- 		return false, nil
- 	}
- 
--	minutes := setting.EmailCodeValidMinutes
- 	code = code[:timeLimitCodeLength]
- 
- 	// split code
--	start := code[:12]
--	lives := code[12:18]
--	if d, err := com.StrTo(lives).Int(); err == nil {
--		minutes = d
-+	startStr := code[:timeLimitStartDateLength]
-+	minutesStr := code[timeLimitStartDateLength : timeLimitStartDateLength+timeLimitMinutesLength]
-+	minutes, err := strconv.Atoi(minutesStr)
-+	if err != nil {
-+		return false, fmt.Errorf("invalid time limit code: %v", err)
- 	}
- 
--	// right active code
--	data := com.ToStr(user.Id) + user.Email + user.Login + user.Password + user.Rands
--	retCode, err := createTimeLimitCode(data, minutes, start)
-+	// verify code
-+	payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
-+	expectedCode, err := createTimeLimitCode(payload, minutes, startStr)
- 	if err != nil {
- 		return false, err
- 	}
--	fmt.Printf("code : %s\ncode2: %s", retCode, code)
--	if retCode == code && minutes > 0 {
-+	if hmac.Equal([]byte(code), []byte(expectedCode)) && minutes > 0 {
- 		// check time is expired or not
--		before, _ := time.ParseInLocation("200601021504", start, time.Local)
-+		before, _ := time.ParseInLocation("200601021504", startStr, time.Local)
- 		now := time.Now()
- 		if before.Add(time.Minute*time.Duration(minutes)).Unix() > now.Unix() {
- 			return true, nil
-@@ -94,15 +98,15 @@ func getLoginForEmailCode(code string) string {
- 	return string(b)
- }
- 
--func createUserEmailCode(u *models.User, startInf interface{}) (string, error) {
-+func createUserEmailCode(user *models.User, startStr string) (string, error) {
- 	minutes := setting.EmailCodeValidMinutes
--	data := com.ToStr(u.Id) + u.Email + u.Login + u.Password + u.Rands
--	code, err := createTimeLimitCode(data, minutes, startInf)
-+	payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
-+	code, err := createTimeLimitCode(payload, minutes, startStr)
- 	if err != nil {
- 		return "", err
- 	}
- 
- 	// add tail hex username
--	code += hex.EncodeToString([]byte(u.Login))
-+	code += hex.EncodeToString([]byte(user.Login))
- 	return code, nil
- }
-diff --git a/pkg/services/notifications/codes_test.go b/pkg/services/notifications/codes_test.go
-index d2b1f3a617..bea88e0bf5 100644
---- a/pkg/services/notifications/codes_test.go
-+++ b/pkg/services/notifications/codes_test.go
-@@ -1,19 +1,129 @@
- package notifications
- 
- import (
-+	"fmt"
-+	"strconv"
- 	"testing"
-+	"time"
- 
- 	"github.com/grafana/grafana/pkg/models"
- 	"github.com/grafana/grafana/pkg/setting"
- 	. "github.com/smartystreets/goconvey/convey"
-+	"github.com/stretchr/testify/require"
- )
- 
-+func TestTimeLimitCodes(t *testing.T) {
-+	user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"}
-+
-+	format := "200601021504"
-+	mailPayload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands
-+	tenMinutesAgo := time.Now().Add(-time.Minute * 10)
-+
-+	tests := []struct {
-+		desc    string
-+		payload string
-+		start   time.Time
-+		minutes int
-+		valid   bool
-+	}{
-+		{
-+			desc:    "code generated 10 minutes ago, 5 minutes valid",
-+			payload: mailPayload,
-+			start:   tenMinutesAgo,
-+			minutes: 5,
-+			valid:   false,
-+		},
-+		{
-+			desc:    "code generated 10 minutes ago, 9 minutes valid",
-+			payload: mailPayload,
-+			start:   tenMinutesAgo,
-+			minutes: 9,
-+			valid:   false,
-+		},
-+		{
-+			desc:    "code generated 10 minutes ago, 10 minutes valid",
-+			payload: mailPayload,
-+			start:   tenMinutesAgo,
-+			minutes: 10,
-+			// code was valid exactly 10 minutes since evaluating the tenMinutesAgo assignment
-+			// by the time this test is run the code is already expired
-+			valid: false,
-+		},
-+		{
-+			desc:    "code generated 10 minutes ago, 11 minutes valid",
-+			payload: mailPayload,
-+			start:   tenMinutesAgo,
-+			minutes: 11,
-+			valid:   true,
-+		},
-+		{
-+			desc:    "code generated 10 minutes ago, 20 minutes valid",
-+			payload: mailPayload,
-+			start:   tenMinutesAgo,
-+			minutes: 20,
-+			valid:   true,
-+		},
-+		{
-+			desc:    "code generated 10 minutes ago, 20 minutes valid, tampered payload",
-+			payload: mailPayload[:len(mailPayload)-1] + "x",
-+			start:   tenMinutesAgo,
-+			minutes: 20,
-+			valid:   false,
-+		},
-+	}
-+
-+	for _, test := range tests {
-+		t.Run(test.desc, func(t *testing.T) {
-+			code, err := createTimeLimitCode(test.payload, test.minutes, test.start.Format(format))
-+			require.NoError(t, err)
-+
-+			isValid, err := validateUserEmailCode(user, code)
-+			require.NoError(t, err)
-+			require.Equal(t, test.valid, isValid)
-+		})
-+	}
-+
-+	t.Run("tampered minutes", func(t *testing.T) {
-+		code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format))
-+		require.NoError(t, err)
-+
-+		// code is expired
-+		isValid, err := validateUserEmailCode(user, code)
-+		require.NoError(t, err)
-+		require.Equal(t, false, isValid)
-+
-+		// let's try to extend the code by tampering the minutes
-+		code = code[:12] + fmt.Sprintf("%06d", 20) + code[18:]
-+		isValid, err = validateUserEmailCode(user, code)
-+		require.NoError(t, err)
-+		require.Equal(t, false, isValid)
-+	})
-+
-+	t.Run("tampered start string", func(t *testing.T) {
-+		code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format))
-+		require.NoError(t, err)
-+
-+		// code is expired
-+		isValid, err := validateUserEmailCode(user, code)
-+		require.NoError(t, err)
-+		require.Equal(t, false, isValid)
-+
-+		// let's try to extend the code by tampering the start string
-+		oneMinuteAgo := time.Now().Add(-time.Minute)
-+
-+		code = oneMinuteAgo.Format(format) + code[12:]
-+		isValid, err = validateUserEmailCode(user, code)
-+		require.NoError(t, err)
-+		require.Equal(t, false, isValid)
-+	})
-+}
-+
- func TestEmailCodes(t *testing.T) {
- 	Convey("When generating code", t, func() {
- 		setting.EmailCodeValidMinutes = 120
- 
- 		user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"}
--		code, err := createUserEmailCode(user, nil)
-+		code, err := createUserEmailCode(user, "")
- 		So(err, ShouldBeNil)
- 
- 		Convey("getLoginForCode should return login", func() {
-@@ -27,7 +137,7 @@ func TestEmailCodes(t *testing.T) {
- 			So(isValid, ShouldBeTrue)
- 		})
- 
--		Convey("Cannot verify in-valid code", func() {
-+		Convey("Cannot verify invalid code", func() {
- 			code = "ASD"
- 			isValid, err := validateUserEmailCode(user, code)
- 			So(err, ShouldBeNil)
-diff --git a/pkg/services/notifications/notifications.go b/pkg/services/notifications/notifications.go
-index beea82f43e..5a575d1415 100644
---- a/pkg/services/notifications/notifications.go
-+++ b/pkg/services/notifications/notifications.go
-@@ -149,7 +149,7 @@ func (ns *NotificationService) sendEmailCommandHandler(cmd *models.SendEmailComm
- }
- 
- func (ns *NotificationService) sendResetPasswordEmail(cmd *models.SendResetPasswordEmailCommand) error {
--	code, err := createUserEmailCode(cmd.User, nil)
-+	code, err := createUserEmailCode(cmd.User, "")
- 	if err != nil {
- 		return err
- 	}
-diff --git a/pkg/services/notifications/notifications_test.go b/pkg/services/notifications/notifications_test.go
-index e7680c3943..fb73e332ea 100644
---- a/pkg/services/notifications/notifications_test.go
-+++ b/pkg/services/notifications/notifications_test.go
-@@ -1,12 +1,14 @@
- package notifications
- 
- import (
-+	"regexp"
- 	"testing"
- 
- 	"github.com/grafana/grafana/pkg/bus"
- 	"github.com/grafana/grafana/pkg/models"
- 	"github.com/grafana/grafana/pkg/setting"
- 	. "github.com/smartystreets/goconvey/convey"
-+	"github.com/stretchr/testify/require"
- )
- 
- func TestNotifications(t *testing.T) {
-@@ -25,13 +27,28 @@ func TestNotifications(t *testing.T) {
- 		So(err, ShouldBeNil)
- 
- 		Convey("When sending reset email password", func() {
--			err := ns.sendResetPasswordEmail(&models.SendResetPasswordEmailCommand{User: &models.User{Email: "asd@asd.com"}})
-+			user := models.User{Email: "asd@asd.com", Login: "asd@asd.com"}
-+			err := ns.sendResetPasswordEmail(&models.SendResetPasswordEmailCommand{User: &user})
- 			So(err, ShouldBeNil)
- 
- 			sentMsg := <-ns.mailQueue
- 			So(sentMsg.Body, ShouldContainSubstring, "body")
- 			So(sentMsg.Subject, ShouldEqual, "Reset your Grafana password - asd@asd.com")
- 			So(sentMsg.Body, ShouldNotContainSubstring, "Subject")
-+
-+			// find code in mail
-+			r, _ := regexp.Compile(`code=(\w+)`)
-+			match := r.FindString(sentMsg.Body)
-+			code := match[len("code="):]
-+
-+			// verify code
-+			bus.AddHandler("test", func(query *models.GetUserByLoginQuery) error {
-+				query.Result = &user
-+				return nil
-+			})
-+			query := models.ValidateResetPasswordCodeQuery{Code: code}
-+			err = ns.validateResetPasswordCode(&query)
-+			require.NoError(t, err)
- 		})
- 	})
- }
diff --git a/SOURCES/012-support-go1.18.patch b/SOURCES/012-support-go1.18.patch
deleted file mode 100644
index 0a0ace4..0000000
--- a/SOURCES/012-support-go1.18.patch
+++ /dev/null
@@ -1,315 +0,0 @@
-From b8c4b70b19df84c054831823c92fbf2f3c192e78 Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 16:16:31 +0200
-Subject: [PATCH] support Go 1.18
-
-json-iterator/go supports go1.18 since v1.1.12
-https://github.com/json-iterator/go/releases/tag/v1.1.12
-
-gonum.org/v1/gonum supports go1.18 since commit cccd8af5f6bd1539dd688c88102cb37e9117f96a
-https://github.com/gonum/gonum/pull/1729
-
-diff --git a/go.mod b/go.mod
-index c040bbaab0..cf9af7d44f 100644
---- a/go.mod
-+++ b/go.mod
-@@ -39,7 +39,7 @@ require (
- 	github.com/gobwas/glob v0.2.3
- 	github.com/golang/mock v1.5.0
- 	github.com/golang/protobuf v1.4.3
--	github.com/google/go-cmp v0.5.4
-+	github.com/google/go-cmp v0.5.7
- 	github.com/google/uuid v1.2.0
- 	github.com/gosimple/slug v1.9.0
- 	github.com/grafana/grafana-aws-sdk v0.4.0
-@@ -55,7 +55,7 @@ require (
- 	github.com/jaegertracing/jaeger v1.22.1-0.20210304164023-2fff3ca58910
- 	github.com/jmespath/go-jmespath v0.4.0
- 	github.com/jonboulle/clockwork v0.2.2 // indirect
--	github.com/json-iterator/go v1.1.10
-+	github.com/json-iterator/go v1.1.12
- 	github.com/lib/pq v1.9.0
- 	github.com/linkedin/goavro/v2 v2.10.0
- 	github.com/magefile/mage v1.11.0
-@@ -84,11 +84,11 @@ require (
- 	github.com/yudai/gojsondiff v1.0.0
- 	go.opentelemetry.io/collector v0.21.0
- 	golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
--	golang.org/x/net v0.0.0-20210119194325-5f4716e94777
-+	golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f
- 	golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3
--	golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
-+	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
- 	golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
--	gonum.org/v1/gonum v0.8.2
-+	gonum.org/v1/gonum v0.11.0
- 	google.golang.org/api v0.40.0
- 	google.golang.org/grpc v1.36.0
- 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
-diff --git a/go.sum b/go.sum
-index 50212f12f2..1250ae409c 100644
---- a/go.sum
-+++ b/go.sum
-@@ -49,6 +49,8 @@ collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
- contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs=
- contrib.go.opencensus.io/exporter/prometheus v0.2.0/go.mod h1:TYmVAyE8Tn1lyPcltF5IYYfWp2KHu7lQGIZnj8iZMys=
- dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-+gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
-+git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
- github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
- github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
- github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4=
-@@ -138,7 +140,10 @@ github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f/go.mod h1:f3H
- github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
- github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
- github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
-+github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
-+github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
- github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
-+github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
- github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
- github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
- github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-@@ -206,6 +211,8 @@ github.com/bmatcuk/doublestar v1.2.2/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9
- github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
- github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
- github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
-+github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
-+github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
- github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
- github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
- github.com/bsm/sarama-cluster v2.1.13+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM=
-@@ -384,6 +391,7 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S
- github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
- github.com/fluent/fluent-bit-go v0.0.0-20190925192703-ea13c021720c/go.mod h1:WQX+afhrekY9rGK+WT4xvKSlzmia9gDoLYu4GGYGASQ=
- github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
-+github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
- github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
- github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
- github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
-@@ -414,6 +422,11 @@ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclK
- github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
- github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
- github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
-+github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
-+github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
-+github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
-+github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
-+github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
- github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
- github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
- github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-@@ -421,6 +434,8 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
- github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
- github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
- github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
-+github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
-+github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
- github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
- github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
- github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
-@@ -508,6 +523,8 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+
- github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
- github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
- github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
-+github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
-+github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
- github.com/go-redis/redis/v8 v8.0.0-beta.10.0.20200905143926-df7fe4e2ce72/go.mod h1:CJP1ZIHwhosNYwIdaHPZK9vHsM3+roNBaZ7U9Of1DXc=
- github.com/go-redis/redis/v8 v8.2.3/go.mod h1:ysgGY09J/QeDYbu3HikWEIPCwaeOkuNoTgKayTEaEOw=
- github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU=
-@@ -635,8 +652,9 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
- github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
- github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
- github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
--github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
- github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-+github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
-+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
- github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
- github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
- github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
-@@ -893,8 +911,9 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV
- github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
- github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
- github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
--github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
- github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
- github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
- github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
- github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-@@ -904,6 +923,7 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
- github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
- github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
- github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-+github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
- github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
- github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
- github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
-@@ -1080,8 +1100,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
- github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
- github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
--github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
- github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
- github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
- github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
- github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-@@ -1184,6 +1205,9 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR
- github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
- github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
- github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
-+github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
-+github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
-+github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
- github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU=
- github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
- github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
-@@ -1310,6 +1334,8 @@ github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNue
- github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
- github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
- github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-+github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
-+github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
- github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
- github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
- github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-@@ -1491,6 +1517,7 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
- github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
- github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
- github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-+github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
- github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
- github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
- github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
-@@ -1587,6 +1614,7 @@ golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL
- golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
- golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
- golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-+golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE=
- golang.org/x/exp v0.0.0-20191029154019-8994fa331a53/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
- golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
- golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-@@ -1600,6 +1628,16 @@ golang.org/x/exp v0.0.0-20200821190819-94841d0725da/go.mod h1:3jZMyOhIsHpP37uCMk
- golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
- golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
- golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-+golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-+golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-+golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-+golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
- golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
- golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
- golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-@@ -1621,8 +1659,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
- golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
- golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
- golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
--golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY=
- golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-+golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
-+golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
- golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
- golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
- golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-@@ -1682,8 +1721,9 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
- golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
- golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
- golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
--golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
- golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-+golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
-+golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
- golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
- golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
- golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-@@ -1707,8 +1747,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
- golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
- golang.org/x/sync v0.0.0-20200930132711-30421366ff76/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
- golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
--golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
- golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
-+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
- golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
- golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
- golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-@@ -1802,8 +1843,11 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
- golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
--golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
- golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-+golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-+golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
-+golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
- golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
- golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
- golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-@@ -1814,8 +1858,10 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
- golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
- golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
- golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
--golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
- golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
-+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
- golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
- golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
- golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-@@ -1860,6 +1906,7 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
- golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20190918214516-5a1a30219888/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-+golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
- golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-@@ -1913,8 +1960,9 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
- golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
- golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
--golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
- golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
-+golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8=
-+golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
- golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
- golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
- golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-@@ -1923,12 +1971,15 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T
- gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
- gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
- gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
--gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
- gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
-+gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
-+gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E=
-+gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA=
- gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
--gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
- gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
- gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
-+gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
-+gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo=
- google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
- google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
- google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-@@ -2136,6 +2187,7 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
- honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
- honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY=
- honnef.co/go/tools v0.1.2/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
-+honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
- howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
- k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58=
- k8s.io/api v0.0.0-20191115095533-47f6de673b26/go.mod h1:iA/8arsvelvo4IDqIhX4IbjTEKBGgvsf2OraTuRtLFU=
diff --git a/SOURCES/013-CVE-2021-23648.patch b/SOURCES/013-CVE-2021-23648.patch
deleted file mode 100644
index edd9b83..0000000
--- a/SOURCES/013-CVE-2021-23648.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 76121bc49ce1d5417202ce0a567e4f0f00c75667 Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 17:40:30 +0200
-Subject: [PATCH] upgrade @braintree/sanitize-url to v6.0.0
-
-Resolves: CVE-2021-23648
-
-diff --git a/package.json b/package.json
-index 831586ad88..ab8b142ed9 100644
---- a/package.json
-+++ b/package.json
-@@ -209,7 +209,6 @@
-     "@sentry/utils": "5.24.2",
-     "@torkelo/react-select": "3.0.8",
-     "@types/antlr4": "^4.7.1",
--    "@types/braintree__sanitize-url": "4.0.0",
-     "@types/common-tags": "^1.8.0",
-     "@types/hoist-non-react-statics": "3.3.1",
-     "@types/jsurl": "^1.2.28",
-diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json
-index b24b1af2f4..c3f1b4e181 100644
---- a/packages/grafana-data/package.json
-+++ b/packages/grafana-data/package.json
-@@ -22,7 +22,7 @@
-     "typecheck": "tsc --noEmit"
-   },
-   "dependencies": {
--    "@braintree/sanitize-url": "4.0.0",
-+    "@braintree/sanitize-url": "6.0.0",
-     "@types/d3-interpolate": "^1.3.1",
-     "apache-arrow": "0.16.0",
-     "eventemitter3": "4.0.7",
-@@ -36,7 +36,6 @@
-     "@rollup/plugin-commonjs": "16.0.0",
-     "@rollup/plugin-json": "4.1.0",
-     "@rollup/plugin-node-resolve": "10.0.0",
--    "@types/braintree__sanitize-url": "4.0.0",
-     "@types/jest": "26.0.15",
-     "@types/jquery": "3.3.38",
-     "@types/lodash": "4.14.123",
-diff --git a/yarn.lock b/yarn.lock
-index 3f5e5b80d6..a84bfebaa7 100644
---- a/yarn.lock
-+++ b/yarn.lock
-@@ -3030,10 +3030,10 @@
-   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
-   integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
- 
--"@braintree/sanitize-url@4.0.0":
--  version "4.0.0"
--  resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-4.0.0.tgz#2cda79ffd67b6ea919a63b5e1a883b92d636e844"
--  integrity sha512-bOoFoTxuEUuri/v1q0OXN0HIrZ2EiZlRSKdveU8vS5xf2+g0TmpXhmxkTc1s+XWR5xZNoVU4uvf/Mher98tfLw==
-+"@braintree/sanitize-url@6.0.0":
-+  version "6.0.0"
-+  resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz#fe364f025ba74f6de6c837a84ef44bdb1d61e68f"
-+  integrity sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==
- 
- "@cnakazawa/watch@^1.0.3":
-   version "1.0.3"
-@@ -5752,11 +5752,6 @@
-   resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb"
-   integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==
- 
--"@types/braintree__sanitize-url@4.0.0":
--  version "4.0.0"
--  resolved "https://registry.yarnpkg.com/@types/braintree__sanitize-url/-/braintree__sanitize-url-4.0.0.tgz#0e8a834501f8c375d4b3fb8dcf9398a08ebe068d"
--  integrity sha512-69eGJ8808/WfTJGsvMi1pxQ9UG5Z+llD1x9ash5QX+qvxElDD+eYNAn19cTEVTq6WwUqrqlaTWVCKaTRFTuGmA==
--
- "@types/cheerio@*":
-   version "0.22.13"
-   resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.13.tgz#5eecda091a24514185dcba99eda77e62bf6523e6"
diff --git a/SOURCES/014-CVE-2022-21698.patch b/SOURCES/014-CVE-2022-21698.patch
deleted file mode 100644
index 0f26391..0000000
--- a/SOURCES/014-CVE-2022-21698.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 72cfe3ee850b1e3e00e138d87bd369eabab31697 Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 18:55:29 +0200
-Subject: [PATCH] upgrade prometheus/client_golang to v1.11.1
-
-
-diff --git a/go.mod b/go.mod
-index cf9af7d44f..e7d89f6c76 100644
---- a/go.mod
-+++ b/go.mod
-@@ -65,9 +65,9 @@ require (
- 	github.com/opentracing/opentracing-go v1.2.0
- 	github.com/patrickmn/go-cache v2.1.0+incompatible
- 	github.com/pkg/errors v0.9.1
--	github.com/prometheus/client_golang v1.9.0
-+	github.com/prometheus/client_golang v1.11.1
- 	github.com/prometheus/client_model v0.2.0
--	github.com/prometheus/common v0.18.0
-+	github.com/prometheus/common v0.26.0
- 	github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967
- 	github.com/robfig/cron/v3 v3.0.1
- 	github.com/russellhaering/goxmldsig v1.1.0
-diff --git a/go.sum b/go.sum
-index 1250ae409c..149c317b36 100644
---- a/go.sum
-+++ b/go.sum
-@@ -434,6 +434,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
- github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
- github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
- github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
-+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
- github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
- github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
- github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-@@ -653,6 +654,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
- github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
- github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
- github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
- github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
- github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
- github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
-@@ -912,6 +914,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
- github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
- github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
- github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
- github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
- github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
- github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-@@ -1249,8 +1252,9 @@ github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O
- github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
- github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4=
- github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
--github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU=
- github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
-+github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s=
-+github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
- github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
- github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
- github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-@@ -1275,8 +1279,8 @@ github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16
- github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
- github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
- github.com/prometheus/common v0.17.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
--github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y=
--github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-+github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
-+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
- github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289 h1:dTUS1vaLWq+Y6XKOTnrFpoVsQKLCbCp1OLj24TDi7oM=
- github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc=
- github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-@@ -1292,8 +1296,9 @@ github.com/prometheus/procfs v0.0.6/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
- github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
- github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
- github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
--github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
- github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-+github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
-+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
- github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s=
- github.com/prometheus/prometheus v0.0.0-20190818123050-43acd0e2e93f/go.mod h1:rMTlmxGCvukf2KMu3fClMDKLLoJ5hl61MhcJ7xKakf0=
- github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI=
-@@ -1846,6 +1851,7 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w
- golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
- golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
- golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
- golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
- golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
-@@ -2108,8 +2114,9 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
- google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
- google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
- google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
--google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
- google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-+google.golang.org/protobuf v1.26.0-rc.1 h1:7QnIQpGRHE5RnLKnESfDoxm2dTapTZua5a0kS0A+VXQ=
-+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
- gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
- gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
- gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
diff --git a/SOURCES/015-CVE-2022-21698.vendor.patch b/SOURCES/015-CVE-2022-21698.vendor.patch
deleted file mode 100644
index c80937a..0000000
--- a/SOURCES/015-CVE-2022-21698.vendor.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 16b1f5dec2596a1529a31a43389ed3089ee63b73 Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Tue, 5 Apr 2022 18:55:29 +0200
-Subject: [PATCH] adjust vendored loki dependency for prometheus/client_golang
- v1.11.1
-
-
-diff --git a/vendor/github.com/grafana/loki/pkg/logcli/client/client.go b/vendor/github.com/grafana/loki/pkg/logcli/client/client.go
-index ec8cd02eff..7e76792005 100644
---- a/vendor/github.com/grafana/loki/pkg/logcli/client/client.go
-+++ b/vendor/github.com/grafana/loki/pkg/logcli/client/client.go
-@@ -183,7 +183,7 @@ func (c *DefaultClient) doRequest(path, query string, quiet bool, out interface{
- 		TLSConfig: c.TLSConfig,
- 	}
- 
--	client, err := config.NewClientFromConfig(clientConfig, "logcli", false, false)
-+	client, err := config.NewClientFromConfig(clientConfig, "logcli", config.WithHTTP2Disabled())
- 	if err != nil {
- 		return err
- 	}
diff --git a/SOURCES/016-fix-CVE-2022-31107.patch b/SOURCES/016-fix-CVE-2022-31107.patch
deleted file mode 100644
index 2c69752..0000000
--- a/SOURCES/016-fix-CVE-2022-31107.patch
+++ /dev/null
@@ -1,353 +0,0 @@
-From 41a9a27cf0767828f38a390bbe7cf43f613b882e Mon Sep 17 00:00:00 2001
-From: Andreas Gerstmayr <agerstmayr@redhat.com>
-Date: Fri, 15 Jul 2022 14:05:14 +0200
-Subject: [PATCH] fix CVE-2022-31107
-
-backport 967e17d7ef6bc62a108add33ea699710f0e15870 from v8.4.10
-
-Co-authored-by: Karl Persson <kalle.persson@grafana.com>
-Co-authored-by: Jguer <joao.guerreiro@grafana.com>
-
-diff --git a/pkg/api/ldap_debug.go b/pkg/api/ldap_debug.go
-index 126e760b67..c9e2b606c5 100644
---- a/pkg/api/ldap_debug.go
-+++ b/pkg/api/ldap_debug.go
-@@ -215,6 +215,11 @@ func (hs *HTTPServer) PostSyncUserWithLDAP(c *models.ReqContext) response.Respon
- 		ReqContext:    c,
- 		ExternalUser:  user,
- 		SignupAllowed: hs.Cfg.LDAPAllowSignup,
-+		UserLookupParams: models.UserLookupParams{
-+			UserID: &query.Result.Id, // Upsert by ID only
-+			Email:  nil,
-+			Login:  nil,
-+		},
- 	}
- 
- 	err = bus.Dispatch(upsertCmd)
-diff --git a/pkg/api/login_oauth.go b/pkg/api/login_oauth.go
-index 1fce9b6f61..611d51444f 100644
---- a/pkg/api/login_oauth.go
-+++ b/pkg/api/login_oauth.go
-@@ -250,6 +250,11 @@ func syncUser(
- 		ReqContext:    ctx,
- 		ExternalUser:  extUser,
- 		SignupAllowed: connect.IsSignupAllowed(),
-+		UserLookupParams: models.UserLookupParams{
-+			Email:  &extUser.Email,
-+			UserID: nil,
-+			Login:  nil,
-+		},
- 	}
- 	if err := bus.Dispatch(cmd); err != nil {
- 		return nil, err
-diff --git a/pkg/login/ldap_login.go b/pkg/login/ldap_login.go
-index cb5d984e73..82dac2ee9e 100644
---- a/pkg/login/ldap_login.go
-+++ b/pkg/login/ldap_login.go
-@@ -56,9 +56,13 @@ var loginUsingLDAP = func(query *models.LoginUserQuery) (bool, error) {
- 		ReqContext:    query.ReqContext,
- 		ExternalUser:  externalUser,
- 		SignupAllowed: setting.LDAPAllowSignup,
-+		UserLookupParams: models.UserLookupParams{
-+			Login:  &externalUser.Login,
-+			Email:  &externalUser.Email,
-+			UserID: nil,
-+		},
- 	}
--	err = bus.Dispatch(upsert)
--	if err != nil {
-+	if err = bus.Dispatch(upsert); err != nil {
- 		return true, err
- 	}
- 	query.User = upsert.Result
-diff --git a/pkg/models/user_auth.go b/pkg/models/user_auth.go
-index 2061cf048b..a98efe659e 100644
---- a/pkg/models/user_auth.go
-+++ b/pkg/models/user_auth.go
-@@ -54,11 +54,11 @@ type RequestURIKey struct{}
- // COMMANDS
- 
- type UpsertUserCommand struct {
--	ReqContext    *ReqContext
--	ExternalUser  *ExternalUserInfo
-+	ReqContext   *ReqContext
-+	ExternalUser *ExternalUserInfo
-+	UserLookupParams
-+	Result        *User
- 	SignupAllowed bool
--
--	Result *User
- }
- 
- type SetAuthInfoCommand struct {
-@@ -95,13 +95,18 @@ type LoginUserQuery struct {
- type GetUserByAuthInfoQuery struct {
- 	AuthModule string
- 	AuthId     string
--	UserId     int64
--	Email      string
--	Login      string
-+	UserLookupParams
- 
- 	Result *User
- }
- 
-+type UserLookupParams struct {
-+	// Describes lookup order as well
-+	UserID *int64  // if set, will try to find the user by id
-+	Email  *string // if set, will try to find the user by email
-+	Login  *string // if set, will try to find the user by login
-+}
-+
- type GetExternalUserInfoByLoginQuery struct {
- 	LoginOrEmail string
- 
-diff --git a/pkg/services/contexthandler/authproxy/authproxy.go b/pkg/services/contexthandler/authproxy/authproxy.go
-index 80e5a5b9e0..0d834748a7 100644
---- a/pkg/services/contexthandler/authproxy/authproxy.go
-+++ b/pkg/services/contexthandler/authproxy/authproxy.go
-@@ -246,6 +246,11 @@ func (auth *AuthProxy) LoginViaLDAP() (int64, error) {
- 		ReqContext:    auth.ctx,
- 		SignupAllowed: auth.cfg.LDAPAllowSignup,
- 		ExternalUser:  extUser,
-+		UserLookupParams: models.UserLookupParams{
-+			Login:  &extUser.Login,
-+			Email:  &extUser.Email,
-+			UserID: nil,
-+		},
- 	}
- 	if err := bus.Dispatch(upsert); err != nil {
- 		return 0, err
-@@ -288,6 +293,11 @@ func (auth *AuthProxy) LoginViaHeader() (int64, error) {
- 		ReqContext:    auth.ctx,
- 		SignupAllowed: auth.cfg.AuthProxyAutoSignUp,
- 		ExternalUser:  extUser,
-+		UserLookupParams: models.UserLookupParams{
-+			UserID: nil,
-+			Login:  &extUser.Login,
-+			Email:  &extUser.Email,
-+		},
- 	}
- 
- 	err := bus.Dispatch(upsert)
-diff --git a/pkg/services/login/login.go b/pkg/services/login/login.go
-index 9e08a36b06..b74d1d3e8f 100644
---- a/pkg/services/login/login.go
-+++ b/pkg/services/login/login.go
-@@ -37,11 +37,9 @@ func (ls *LoginService) UpsertUser(cmd *models.UpsertUserCommand) error {
- 	extUser := cmd.ExternalUser
- 
- 	userQuery := &models.GetUserByAuthInfoQuery{
--		AuthModule: extUser.AuthModule,
--		AuthId:     extUser.AuthId,
--		UserId:     extUser.UserId,
--		Email:      extUser.Email,
--		Login:      extUser.Login,
-+		AuthModule:       extUser.AuthModule,
-+		AuthId:           extUser.AuthId,
-+		UserLookupParams: cmd.UserLookupParams,
- 	}
- 	if err := bus.Dispatch(userQuery); err != nil {
- 		if !errors.Is(err, models.ErrUserNotFound) {
-diff --git a/pkg/services/login/login_test.go b/pkg/services/login/login_test.go
-index 04953b567a..dd84ee29c8 100644
---- a/pkg/services/login/login_test.go
-+++ b/pkg/services/login/login_test.go
-@@ -82,10 +82,12 @@ func Test_teamSync(t *testing.T) {
- 		QuotaService: &quota.QuotaService{},
- 	}
- 
--	upserCmd := &models.UpsertUserCommand{ExternalUser: &models.ExternalUserInfo{Email: "test_user@example.org"}}
-+	email := "test_user@example.org"
-+	upserCmd := &models.UpsertUserCommand{ExternalUser: &models.ExternalUserInfo{Email: email},
-+		UserLookupParams: models.UserLookupParams{Email: &email}}
- 	expectedUser := &models.User{
- 		Id:    1,
--		Email: "test_user@example.org",
-+		Email: email,
- 		Name:  "test_user",
- 		Login: "test_user",
- 	}
-diff --git a/pkg/services/sqlstore/user_auth.go b/pkg/services/sqlstore/user_auth.go
-index 9605ccce76..f6f0e510bc 100644
---- a/pkg/services/sqlstore/user_auth.go
-+++ b/pkg/services/sqlstore/user_auth.go
-@@ -40,11 +40,12 @@ func GetUserByAuthInfo(query *models.GetUserByAuthInfoQuery) error {
- 			}
- 
- 			// if user id was specified and doesn't match the user_auth entry, remove it
--			if query.UserId != 0 && query.UserId != authQuery.Result.UserId {
--				err = DeleteAuthInfo(&models.DeleteAuthInfoCommand{
-+			if query.UserLookupParams.UserID != nil &&
-+				*query.UserLookupParams.UserID != 0 &&
-+				*query.UserLookupParams.UserID != authQuery.Result.UserId {
-+				if err := DeleteAuthInfo(&models.DeleteAuthInfoCommand{
- 					UserAuth: authQuery.Result,
--				})
--				if err != nil {
-+				}); err != nil {
- 					sqlog.Error("Error removing user_auth entry", "error", err)
- 				}
- 
-@@ -70,17 +71,18 @@ func GetUserByAuthInfo(query *models.GetUserByAuthInfoQuery) error {
- 		}
- 	}
- 
-+	params := query.UserLookupParams
- 	// If not found, try to find the user by id
--	if !has && query.UserId != 0 {
--		has, err = x.Id(query.UserId).Get(user)
-+	if !has && params.UserID != nil && *params.UserID != 0 {
-+		has, err = x.Id(*params.UserID).Get(user)
- 		if err != nil {
- 			return err
- 		}
- 	}
- 
- 	// If not found, try to find the user by email address
--	if !has && query.Email != "" {
--		user = &models.User{Email: query.Email}
-+	if !has && params.Email != nil && *params.Email != "" {
-+		user = &models.User{Email: *params.Email}
- 		has, err = x.Get(user)
- 		if err != nil {
- 			return err
-@@ -88,8 +90,8 @@ func GetUserByAuthInfo(query *models.GetUserByAuthInfoQuery) error {
- 	}
- 
- 	// If not found, try to find the user by login
--	if !has && query.Login != "" {
--		user = &models.User{Login: query.Login}
-+	if !has && params.Login != nil && *params.Login != "" {
-+		user = &models.User{Login: *params.Login}
- 		has, err = x.Get(user)
- 		if err != nil {
- 			return err
-diff --git a/pkg/services/sqlstore/user_auth_test.go b/pkg/services/sqlstore/user_auth_test.go
-index e5bb2379e5..d94ce34edb 100644
---- a/pkg/services/sqlstore/user_auth_test.go
-+++ b/pkg/services/sqlstore/user_auth_test.go
-@@ -45,7 +45,7 @@ func TestUserAuth(t *testing.T) {
- 			// By Login
- 			login := "loginuser0"
- 
--			query := &models.GetUserByAuthInfoQuery{Login: login}
-+			query := &models.GetUserByAuthInfoQuery{UserLookupParams: models.UserLookupParams{Login: &login}}
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -54,7 +54,7 @@ func TestUserAuth(t *testing.T) {
- 			// By ID
- 			id := query.Result.Id
- 
--			query = &models.GetUserByAuthInfoQuery{UserId: id}
-+			query = &models.GetUserByAuthInfoQuery{UserLookupParams: models.UserLookupParams{UserID: &id}}
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -63,7 +63,7 @@ func TestUserAuth(t *testing.T) {
- 			// By Email
- 			email := "user1@test.com"
- 
--			query = &models.GetUserByAuthInfoQuery{Email: email}
-+			query = &models.GetUserByAuthInfoQuery{UserLookupParams: models.UserLookupParams{Email: &email}}
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -72,7 +72,7 @@ func TestUserAuth(t *testing.T) {
- 			// Don't find nonexistent user
- 			email = "nonexistent@test.com"
- 
--			query = &models.GetUserByAuthInfoQuery{Email: email}
-+			query = &models.GetUserByAuthInfoQuery{UserLookupParams: models.UserLookupParams{Email: &email}}
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldEqual, models.ErrUserNotFound)
-@@ -90,7 +90,7 @@ func TestUserAuth(t *testing.T) {
- 			// create user_auth entry
- 			login := "loginuser0"
- 
--			query.Login = login
-+			query.UserLookupParams.Login = &login
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -104,9 +104,9 @@ func TestUserAuth(t *testing.T) {
- 			So(query.Result.Login, ShouldEqual, login)
- 
- 			// get with non-matching id
--			id := query.Result.Id
-+			idPlusOne := query.Result.Id + 1
- 
--			query.UserId = id + 1
-+			query.UserLookupParams.UserID = &idPlusOne
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -143,7 +143,7 @@ func TestUserAuth(t *testing.T) {
- 			login := "loginuser0"
- 
- 			// Calling GetUserByAuthInfoQuery on an existing user will populate an entry in the user_auth table
--			query := &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "test", AuthId: "test"}
-+			query := &models.GetUserByAuthInfoQuery{AuthModule: "test", AuthId: "test", UserLookupParams: models.UserLookupParams{Login: &login}}
- 			err = GetUserByAuthInfo(query)
- 
- 			So(err, ShouldBeNil)
-@@ -178,7 +178,7 @@ func TestUserAuth(t *testing.T) {
- 			// Calling GetUserByAuthInfoQuery on an existing user will populate an entry in the user_auth table
- 			// Make the first log-in during the past
- 			getTime = func() time.Time { return time.Now().AddDate(0, 0, -2) }
--			query := &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "test1", AuthId: "test1"}
-+			query := &models.GetUserByAuthInfoQuery{AuthModule: "test1", AuthId: "test1", UserLookupParams: models.UserLookupParams{Login: &login}}
- 			err = GetUserByAuthInfo(query)
- 			getTime = time.Now
- 
-@@ -188,7 +188,7 @@ func TestUserAuth(t *testing.T) {
- 			// Add a second auth module for this user
- 			// Have this module's last log-in be more recent
- 			getTime = func() time.Time { return time.Now().AddDate(0, 0, -1) }
--			query = &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "test2", AuthId: "test2"}
-+			query = &models.GetUserByAuthInfoQuery{AuthModule: "test2", AuthId: "test2", UserLookupParams: models.UserLookupParams{Login: &login}}
- 			err = GetUserByAuthInfo(query)
- 			getTime = time.Now
- 
-diff --git a/pkg/services/sqlstore/user_test.go b/pkg/services/sqlstore/user_test.go
-index 7da19f0ef4..aa796ffb02 100644
---- a/pkg/services/sqlstore/user_test.go
-+++ b/pkg/services/sqlstore/user_test.go
-@@ -455,7 +455,7 @@ func TestUserDataAccess(t *testing.T) {
- 				// Calling GetUserByAuthInfoQuery on an existing user will populate an entry in the user_auth table
- 				// Make the first log-in during the past
- 				getTime = func() time.Time { return time.Now().AddDate(0, 0, -2) }
--				query := &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "ldap", AuthId: "ldap0"}
-+				query := &models.GetUserByAuthInfoQuery{AuthModule: "ldap", AuthId: "ldap0", UserLookupParams: models.UserLookupParams{Login: &login}}
- 				err := GetUserByAuthInfo(query)
- 				getTime = time.Now
- 
-@@ -465,7 +465,7 @@ func TestUserDataAccess(t *testing.T) {
- 				// Add a second auth module for this user
- 				// Have this module's last log-in be more recent
- 				getTime = func() time.Time { return time.Now().AddDate(0, 0, -1) }
--				query = &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "oauth", AuthId: "oauth0"}
-+				query = &models.GetUserByAuthInfoQuery{AuthModule: "oauth", AuthId: "oauth0", UserLookupParams: models.UserLookupParams{Login: &login}}
- 				err = GetUserByAuthInfo(query)
- 				getTime = time.Now
- 
-@@ -511,7 +511,7 @@ func TestUserDataAccess(t *testing.T) {
- 					// Calling GetUserByAuthInfoQuery on an existing user will populate an entry in the user_auth table
- 					// Make the first log-in during the past
- 					getTime = func() time.Time { return time.Now().AddDate(0, 0, -2) }
--					query := &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "ldap", AuthId: fmt.Sprint("ldap", i)}
-+					query := &models.GetUserByAuthInfoQuery{AuthModule: "ldap", AuthId: fmt.Sprint("ldap", i), UserLookupParams: models.UserLookupParams{Login: &login}}
- 					err := GetUserByAuthInfo(query)
- 					getTime = time.Now
- 
-@@ -522,7 +522,7 @@ func TestUserDataAccess(t *testing.T) {
- 				// Log in first user with oauth
- 				login := "loginuser0"
- 				getTime = func() time.Time { return time.Now().AddDate(0, 0, -1) }
--				query := &models.GetUserByAuthInfoQuery{Login: login, AuthModule: "oauth", AuthId: "oauth0"}
-+				query := &models.GetUserByAuthInfoQuery{AuthModule: "oauth", AuthId: "oauth0", UserLookupParams: models.UserLookupParams{Login: &login}}
- 				err := GetUserByAuthInfo(query)
- 				getTime = time.Now
- 
diff --git a/SOURCES/1001-vendor-patch-removed-backend-crypto.patch b/SOURCES/1001-vendor-patch-removed-backend-crypto.patch
new file mode 100644
index 0000000..383b6e2
--- /dev/null
+++ b/SOURCES/1001-vendor-patch-removed-backend-crypto.patch
@@ -0,0 +1,427 @@
+patch removed backend crypto
+
+the `Makefile` removed a few files containing (unused) crypto
+algorithms from the vendor tarball, which are not used in Grafana.
+This patch removes all references to the deleted files.
+
+diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go
+new file mode 100644
+index 0000000000..871e612a61
+--- /dev/null
++++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go
+@@ -0,0 +1,25 @@
++package elgamal
++
++import (
++	"io"
++	"math/big"
++)
++
++// PublicKey represents an ElGamal public key.
++type PublicKey struct {
++	G, P, Y *big.Int
++}
++
++// PrivateKey represents an ElGamal private key.
++type PrivateKey struct {
++	PublicKey
++	X *big.Int
++}
++
++func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) {
++	panic("ElGamal encryption not available")
++}
++
++func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) {
++	panic("ElGamal encryption not available")
++}
+diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
+index 0a19794a8e..25a5ee9158 100644
+--- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go
++++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
+@@ -22,7 +22,6 @@ import (
+ 	"math/big"
+ 	"math/bits"
+ 
+-	"golang.org/x/crypto/cast5"
+ 	"golang.org/x/crypto/openpgp/errors"
+ )
+ 
+@@ -493,7 +492,7 @@ func (cipher CipherFunction) KeySize() int {
+ 	case Cipher3DES:
+ 		return 24
+ 	case CipherCAST5:
+-		return cast5.KeySize
++		panic("cast5 cipher not available")
+ 	case CipherAES128:
+ 		return 16
+ 	case CipherAES192:
+@@ -523,7 +522,7 @@ func (cipher CipherFunction) new(key []byte) (block cipher.Block) {
+ 	case Cipher3DES:
+ 		block, _ = des.NewTripleDESCipher(key)
+ 	case CipherCAST5:
+-		block, _ = cast5.NewCipher(key)
++		panic("cast5 cipher not available")
+ 	case CipherAES128, CipherAES192, CipherAES256:
+ 		block, _ = aes.NewCipher(key)
+ 	}
+diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
+index 6126030eb9..3a54c5f2b1 100644
+--- a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
++++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
+@@ -5,13 +5,12 @@
+ package packet
+ 
+ import (
+-	"crypto/cipher"
+ 	"crypto/sha1"
+ 	"crypto/subtle"
+-	"golang.org/x/crypto/openpgp/errors"
+ 	"hash"
+ 	"io"
+-	"strconv"
++
++	"golang.org/x/crypto/openpgp/errors"
+ )
+ 
+ // SymmetricallyEncrypted represents a symmetrically encrypted byte string. The
+@@ -45,46 +44,7 @@ func (se *SymmetricallyEncrypted) parse(r io.Reader) error {
+ // packet can be read. An incorrect key can, with high probability, be detected
+ // immediately and this will result in a KeyIncorrect error being returned.
+ func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) {
+-	keySize := c.KeySize()
+-	if keySize == 0 {
+-		return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c)))
+-	}
+-	if len(key) != keySize {
+-		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length")
+-	}
+-
+-	if se.prefix == nil {
+-		se.prefix = make([]byte, c.blockSize()+2)
+-		_, err := readFull(se.contents, se.prefix)
+-		if err != nil {
+-			return nil, err
+-		}
+-	} else if len(se.prefix) != c.blockSize()+2 {
+-		return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths")
+-	}
+-
+-	ocfbResync := OCFBResync
+-	if se.MDC {
+-		// MDC packets use a different form of OCFB mode.
+-		ocfbResync = OCFBNoResync
+-	}
+-
+-	s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync)
+-	if s == nil {
+-		return nil, errors.ErrKeyIncorrect
+-	}
+-
+-	plaintext := cipher.StreamReader{S: s, R: se.contents}
+-
+-	if se.MDC {
+-		// MDC packets have an embedded hash that we need to check.
+-		h := sha1.New()
+-		h.Write(se.prefix)
+-		return &seMDCReader{in: plaintext, h: h}, nil
+-	}
+-
+-	// Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser.
+-	return seReader{plaintext}, nil
++	panic("OCFB cipher not available")
+ }
+ 
+ // seReader wraps an io.Reader with a no-op Close method.
+@@ -254,37 +214,5 @@ func (c noOpCloser) Close() error {
+ // written.
+ // If config is nil, sensible defaults will be used.
+ func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) {
+-	if c.KeySize() != len(key) {
+-		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length")
+-	}
+-	writeCloser := noOpCloser{w}
+-	ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC)
+-	if err != nil {
+-		return
+-	}
+-
+-	_, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion})
+-	if err != nil {
+-		return
+-	}
+-
+-	block := c.new(key)
+-	blockSize := block.BlockSize()
+-	iv := make([]byte, blockSize)
+-	_, err = config.Random().Read(iv)
+-	if err != nil {
+-		return
+-	}
+-	s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync)
+-	_, err = ciphertext.Write(prefix)
+-	if err != nil {
+-		return
+-	}
+-	plaintext := cipher.StreamWriter{S: s, W: ciphertext}
+-
+-	h := sha1.New()
+-	h.Write(iv)
+-	h.Write(iv[blockSize-2:])
+-	contents = &seMDCWriter{w: plaintext, h: h}
+-	return
++	panic("OCFB cipher not available")
+ }
+diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go
+index 484ca51b71..5f502b8df1 100644
+--- a/vendor/golang.org/x/crypto/pkcs12/crypto.go
++++ b/vendor/golang.org/x/crypto/pkcs12/crypto.go
+@@ -11,8 +11,6 @@ import (
+ 	"crypto/x509/pkix"
+ 	"encoding/asn1"
+ 	"errors"
+-
+-	"golang.org/x/crypto/pkcs12/internal/rc2"
+ )
+ 
+ var (
+@@ -46,10 +44,6 @@ func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byt
+ 
+ type shaWith40BitRC2CBC struct{}
+ 
+-func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) {
+-	return rc2.New(key, len(key)*8)
+-}
+-
+ func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte {
+ 	return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5)
+ }
+@@ -70,7 +64,7 @@ func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher
+ 	case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC):
+ 		cipherType = shaWithTripleDESCBC{}
+ 	case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC):
+-		cipherType = shaWith40BitRC2CBC{}
++		panic("RC2 encryption not available")
+ 	default:
+ 		return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported")
+ 	}
+diff --git a/vendor/github.com/prometheus/exporter-toolkit/web/handler.go b/vendor/github.com/prometheus/exporter-toolkit/web/handler.go
+index ae3ebc03b9..11dbc3c56e 100644
+--- a/vendor/github.com/prometheus/exporter-toolkit/web/handler.go
++++ b/vendor/github.com/prometheus/exporter-toolkit/web/handler.go
+@@ -16,13 +16,11 @@
+ package web
+ 
+ import (
+-	"encoding/hex"
+ 	"fmt"
+ 	"net/http"
+ 	"sync"
+ 
+ 	"github.com/go-kit/log"
+-	"golang.org/x/crypto/bcrypt"
+ )
+ 
+ // extraHTTPHeaders is a map of HTTP headers that can be added to HTTP
+@@ -36,22 +34,6 @@ var extraHTTPHeaders = map[string][]string{
+ 	"Content-Security-Policy":   nil,
+ }
+ 
+-func validateUsers(configPath string) error {
+-	c, err := getConfig(configPath)
+-	if err != nil {
+-		return err
+-	}
+-
+-	for _, p := range c.Users {
+-		_, err = bcrypt.Cost([]byte(p))
+-		if err != nil {
+-			return err
+-		}
+-	}
+-
+-	return nil
+-}
+-
+ // validateHeaderConfig checks that the provided header configuration is correct.
+ // It does not check the validity of all the values, only the ones which are
+ // well-defined enumerations.
+@@ -83,55 +65,3 @@ type webHandler struct {
+ 	// only once in parallel as this is CPU intensive.
+ 	bcryptMtx sync.Mutex
+ }
+-
+-func (u *webHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+-	c, err := getConfig(u.tlsConfigPath)
+-	if err != nil {
+-		u.logger.Log("msg", "Unable to parse configuration", "err", err)
+-		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
+-		return
+-	}
+-
+-	// Configure http headers.
+-	for k, v := range c.HTTPConfig.Header {
+-		w.Header().Set(k, v)
+-	}
+-
+-	if len(c.Users) == 0 {
+-		u.handler.ServeHTTP(w, r)
+-		return
+-	}
+-
+-	user, pass, auth := r.BasicAuth()
+-	if auth {
+-		hashedPassword, validUser := c.Users[user]
+-
+-		if !validUser {
+-			// The user is not found. Use a fixed password hash to
+-			// prevent user enumeration by timing requests.
+-			// This is a bcrypt-hashed version of "fakepassword".
+-			hashedPassword = "$2y$10$QOauhQNbBCuQDKes6eFzPeMqBSjb7Mr5DUmpZ/VcEd00UAV/LDeSi"
+-		}
+-
+-		cacheKey := hex.EncodeToString(append(append([]byte(user), []byte(hashedPassword)...), []byte(pass)...))
+-		authOk, ok := u.cache.get(cacheKey)
+-
+-		if !ok {
+-			// This user, hashedPassword, password is not cached.
+-			u.bcryptMtx.Lock()
+-			err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(pass))
+-			u.bcryptMtx.Unlock()
+-
+-			authOk = err == nil
+-			u.cache.set(cacheKey, authOk)
+-		}
+-
+-		if authOk && validUser {
+-			u.handler.ServeHTTP(w, r)
+-			return
+-		}
+-	}
+-
+-	w.Header().Set("WWW-Authenticate", "Basic")
+-	http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
+-}
+diff --git a/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go b/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go
+index 2668964a06..291464ba7e 100644
+--- a/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go
++++ b/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go
+@@ -18,12 +18,8 @@ import (
+ 	"crypto/x509"
+ 	"fmt"
+ 	"io/ioutil"
+-	"net"
+-	"net/http"
+ 	"path/filepath"
+ 
+-	"github.com/go-kit/log"
+-	"github.com/go-kit/log/level"
+ 	"github.com/pkg/errors"
+ 	config_util "github.com/prometheus/common/config"
+ 	"gopkg.in/yaml.v2"
+@@ -177,93 +173,6 @@ func ConfigToTLSConfig(c *TLSStruct) (*tls.Config, error) {
+ 	return cfg, nil
+ }
+ 
+-// ListenAndServe starts the server on the given address. Based on the file
+-// tlsConfigPath, TLS or basic auth could be enabled.
+-func ListenAndServe(server *http.Server, tlsConfigPath string, logger log.Logger) error {
+-	listener, err := net.Listen("tcp", server.Addr)
+-	if err != nil {
+-		return err
+-	}
+-	defer listener.Close()
+-	return Serve(listener, server, tlsConfigPath, logger)
+-}
+-
+-// Server starts the server on the given listener. Based on the file
+-// tlsConfigPath, TLS or basic auth could be enabled.
+-func Serve(l net.Listener, server *http.Server, tlsConfigPath string, logger log.Logger) error {
+-	if tlsConfigPath == "" {
+-		level.Info(logger).Log("msg", "TLS is disabled.", "http2", false)
+-		return server.Serve(l)
+-	}
+-
+-	if err := validateUsers(tlsConfigPath); err != nil {
+-		return err
+-	}
+-
+-	// Setup basic authentication.
+-	var handler http.Handler = http.DefaultServeMux
+-	if server.Handler != nil {
+-		handler = server.Handler
+-	}
+-
+-	c, err := getConfig(tlsConfigPath)
+-	if err != nil {
+-		return err
+-	}
+-
+-	server.Handler = &webHandler{
+-		tlsConfigPath: tlsConfigPath,
+-		logger:        logger,
+-		handler:       handler,
+-		cache:         newCache(),
+-	}
+-
+-	config, err := ConfigToTLSConfig(&c.TLSConfig)
+-	switch err {
+-	case nil:
+-		if !c.HTTPConfig.HTTP2 {
+-			server.TLSNextProto = make(map[string]func(*http.Server, *tls.Conn, http.Handler))
+-		}
+-		// Valid TLS config.
+-		level.Info(logger).Log("msg", "TLS is enabled.", "http2", c.HTTPConfig.HTTP2)
+-	case errNoTLSConfig:
+-		// No TLS config, back to plain HTTP.
+-		level.Info(logger).Log("msg", "TLS is disabled.", "http2", false)
+-		return server.Serve(l)
+-	default:
+-		// Invalid TLS config.
+-		return err
+-	}
+-
+-	server.TLSConfig = config
+-
+-	// Set the GetConfigForClient method of the HTTPS server so that the config
+-	// and certs are reloaded on new connections.
+-	server.TLSConfig.GetConfigForClient = func(*tls.ClientHelloInfo) (*tls.Config, error) {
+-		return getTLSConfig(tlsConfigPath)
+-	}
+-	return server.ServeTLS(l, "", "")
+-}
+-
+-// Validate configuration file by reading the configuration and the certificates.
+-func Validate(tlsConfigPath string) error {
+-	if tlsConfigPath == "" {
+-		return nil
+-	}
+-	if err := validateUsers(tlsConfigPath); err != nil {
+-		return err
+-	}
+-	c, err := getConfig(tlsConfigPath)
+-	if err != nil {
+-		return err
+-	}
+-	_, err = ConfigToTLSConfig(&c.TLSConfig)
+-	if err == errNoTLSConfig {
+-		return nil
+-	}
+-	return err
+-}
+-
+ type cipher uint16
+ 
+ func (c *cipher) UnmarshalYAML(unmarshal func(interface{}) error) error {
+@@ -346,11 +255,3 @@ func (tv *tlsVersion) MarshalYAML() (interface{}, error) {
+ 	}
+ 	return fmt.Sprintf("%v", tv), nil
+ }
+-
+-// Listen starts the server on the given address. Based on the file
+-// tlsConfigPath, TLS or basic auth could be enabled.
+-//
+-// Deprecated: Use ListenAndServe instead.
+-func Listen(server *http.Server, tlsConfigPath string, logger log.Logger) error {
+-	return ListenAndServe(server, tlsConfigPath, logger)
+-}
diff --git a/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch b/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch
new file mode 100644
index 0000000..6b7e257
--- /dev/null
+++ b/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch
@@ -0,0 +1,145 @@
+use pbkdf2 from OpenSSL if FIPS mode is enabled
+
+This patch modifies the x/crypto/pbkdf2 function to use OpenSSL
+if FIPS mode is enabled.
+
+diff --git a/vendor/golang.org/x/crypto/internal/boring/boring.go b/vendor/golang.org/x/crypto/internal/boring/boring.go
+new file mode 100644
+index 0000000000..5a06918832
+--- /dev/null
++++ b/vendor/golang.org/x/crypto/internal/boring/boring.go
+@@ -0,0 +1,74 @@
++// Copyright 2017 The Go Authors. All rights reserved.
++// Copyright 2021 Red Hat.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++// +build linux
++// +build !android
++// +build !no_openssl
++// +build !cmd_go_bootstrap
++// +build !msan
++
++package boring
++
++// #include "openssl_pbkdf2.h"
++// #cgo LDFLAGS: -ldl
++import "C"
++import (
++	"bytes"
++	"crypto/sha1"
++	"crypto/sha256"
++	"hash"
++	"unsafe"
++)
++
++var (
++	emptySha1   = sha1.Sum([]byte{})
++	emptySha256 = sha256.Sum256([]byte{})
++)
++
++func hashToMD(h hash.Hash) *C.GO_EVP_MD {
++	emptyHash := h.Sum([]byte{})
++
++	switch {
++	case bytes.Equal(emptyHash, emptySha1[:]):
++		return C._goboringcrypto_EVP_sha1()
++	case bytes.Equal(emptyHash, emptySha256[:]):
++		return C._goboringcrypto_EVP_sha256()
++	}
++	return nil
++}
++
++// charptr returns the address of the underlying array in b,
++// being careful not to panic when b has zero length.
++func charptr(b []byte) *C.char {
++	if len(b) == 0 {
++		return nil
++	}
++	return (*C.char)(unsafe.Pointer(&b[0]))
++}
++
++// ucharptr returns the address of the underlying array in b,
++// being careful not to panic when b has zero length.
++func ucharptr(b []byte) *C.uchar {
++	if len(b) == 0 {
++		return nil
++	}
++	return (*C.uchar)(unsafe.Pointer(&b[0]))
++}
++
++func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
++	// println("[debug] using pbkdf2 from OpenSSL")
++	ch := h()
++	md := hashToMD(ch)
++	if md == nil {
++		return nil
++	}
++
++	out := make([]byte, keyLen)
++	ok := C._goboringcrypto_PKCS5_PBKDF2_HMAC(charptr(password), C.int(len(password)), ucharptr(salt), C.int(len(salt)), C.int(iter), md, C.int(keyLen), ucharptr(out))
++	if ok != 1 {
++		panic("boringcrypto: PKCS5_PBKDF2_HMAC failed")
++	}
++	return out
++}
+diff --git a/vendor/golang.org/x/crypto/internal/boring/notboring.go b/vendor/golang.org/x/crypto/internal/boring/notboring.go
+new file mode 100644
+index 0000000000..e244fb5663
+--- /dev/null
++++ b/vendor/golang.org/x/crypto/internal/boring/notboring.go
+@@ -0,0 +1,16 @@
++// Copyright 2017 The Go Authors. All rights reserved.
++// Copyright 2021 Red Hat.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++// +build !linux !cgo android cmd_go_bootstrap msan no_openssl
++
++package boring
++
++import (
++	"hash"
++)
++
++func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
++	panic("boringcrypto: not available")
++}
+diff --git a/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h
+new file mode 100644
+index 0000000000..6dfdf10424
+--- /dev/null
++++ b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h
+@@ -0,0 +1,5 @@
++#include "/usr/lib/golang/src/vendor/github.com/golang-fips/openssl-fips/openssl/goopenssl.h"
++
++DEFINEFUNC(int, PKCS5_PBKDF2_HMAC,
++    (const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, EVP_MD *digest, int keylen, unsigned char *out),
++    (pass, passlen, salt, saltlen, iter, digest, keylen, out))
+diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
+index 593f653008..799a611f94 100644
+--- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
++++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
+@@ -19,8 +19,11 @@ pbkdf2.Key.
+ package pbkdf2 // import "golang.org/x/crypto/pbkdf2"
+ 
+ import (
++	"crypto/boring"
+ 	"crypto/hmac"
+ 	"hash"
++
++	xboring "golang.org/x/crypto/internal/boring"
+ )
+ 
+ // Key derives a key from the password, salt and iteration count, returning a
+@@ -40,6 +43,10 @@ import (
+ // Using a higher iteration count will increase the cost of an exhaustive
+ // search but will also make derivation proportionally slower.
+ func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
++	if boring.Enabled() {
++		return xboring.Pbkdf2Key(password, salt, iter, keyLen, h)
++	}
++
+ 	prf := hmac.New(h, password)
+ 	hashLen := prf.Size()
+ 	numBlocks := (keyLen + hashLen - 1) / hashLen
diff --git a/SOURCES/1003-vendor-skip-goldenfiles-tests.patch b/SOURCES/1003-vendor-skip-goldenfiles-tests.patch
new file mode 100644
index 0000000..8f18c0e
--- /dev/null
+++ b/SOURCES/1003-vendor-skip-goldenfiles-tests.patch
@@ -0,0 +1,18 @@
+skip goldenfiles tests
+
+The golden files include memory dumps from a x86_64 machine.
+Integers are stored as little endian on x86, but as big endian on s390x,
+therefore loading this memory dump fails on s390x.
+
+diff --git a/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go b/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go
+index 320f40f3bd..20f5fa4f46 100644
+--- a/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go
++++ b/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go
+@@ -203,6 +203,7 @@ func CheckGoldenJSONFrame(t *testing.T, dir string, name string, f *data.Frame,
+ // CheckGoldenJSONResponse will verify that the stored JSON file matches the given backend.DataResponse.
+ func CheckGoldenJSONResponse(t *testing.T, dir string, name string, dr *backend.DataResponse, updateFile bool) {
+ 	t.Helper()
++	t.Skip("skipping test: x86_64 memory dump is not compatible with other architectures")
+ 	fpath := path.Join(dir, name+".jsonc")
+ 
+ 	expected, err := readGoldenJSONFile(fpath)
diff --git a/SOURCES/Makefile b/SOURCES/Makefile
deleted file mode 100644
index 9389d7b..0000000
--- a/SOURCES/Makefile
+++ /dev/null
@@ -1,96 +0,0 @@
-VERSION := $(shell rpm --specfile *.spec --qf '%{VERSION}\n' | head -1)
-RELEASE := $(shell rpm --specfile *.spec --qf '%{RELEASE}\n' | head -1 | cut -d. -f1)
-CHANGELOGTIME := $(shell rpm --specfile *.spec --qf '%{CHANGELOGTIME}\n' | head -1)
-SOURCE_DATE_EPOCH := $(shell echo $$(( $(CHANGELOGTIME) - $(CHANGELOGTIME) % 86400 )))
-
-NAME       := grafana
-RPM_NAME   := $(NAME)
-SOURCE_DIR := $(NAME)-$(VERSION)
-SOURCE_TAR := $(NAME)-$(VERSION).tar.gz
-VENDOR_TAR := $(RPM_NAME)-vendor-$(VERSION)-$(RELEASE).tar.xz
-WEBPACK_TAR := $(RPM_NAME)-webpack-$(VERSION)-$(RELEASE).tar.gz
-
-# patches which must be applied before creating the vendor tarball, for example:
-# - changes in dependency versions
-# - changes in Go module imports (which affect the vendored Go modules)
-PATCHES_PRE_VENDOR := \
-	005-remove-unused-dependencies.patch \
-	008-remove-unused-frontend-crypto.patch \
-	012-support-go1.18.patch \
-	013-CVE-2021-23648.patch \
-	014-CVE-2022-21698.patch
-
-# patches which must be applied before creating the webpack, for example:
-# - changes in Node.js sources or vendored dependencies
-PATCHES_PRE_WEBPACK := \
-	008-remove-unused-frontend-crypto.patch
-
-
-all: $(SOURCE_TAR) $(VENDOR_TAR) $(WEBPACK_TAR)
-
-$(SOURCE_TAR):
-	spectool -g $(RPM_NAME).spec
-
-$(VENDOR_TAR): $(SOURCE_TAR)
-	# Start with a clean state
-	rm -rf $(SOURCE_DIR)
-	tar pxf $(SOURCE_TAR)
-
-	# Patches to apply before vendoring
-	for patch in $(PATCHES_PRE_VENDOR); do echo applying $$patch ...; patch -d $(SOURCE_DIR) -p1 --fuzz=0 < $$patch; done
-
-	# Go
-	cd $(SOURCE_DIR) && go mod vendor -v
-	# Remove unused crypto
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/cast5/cast5.go
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/ed25519/ed25519.go
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go
-	rm $(SOURCE_DIR)/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go
-	awk '$$2~/^v/ && $$4 != "indirect" {print "Provides: bundled(golang(" $$1 ")) = " substr($$2, 2)}' $(SOURCE_DIR)/go.mod | \
-		sed -E 's/=(.*)-(.*)-(.*)/=\1-\2.\3/g' > $@.manifest
-
-	# Node.js
-	cd $(SOURCE_DIR) && yarn install --frozen-lockfile
-	# Remove files with licensing issues
-	find $(SOURCE_DIR) -type d -name 'node-notifier' -prune -exec rm -r {} \;
-	find $(SOURCE_DIR) -type d -name 'property-information' -prune -exec rm -r {} \;
-	find $(SOURCE_DIR) -type f -name '*.exe' -delete
-	rm -r $(SOURCE_DIR)/node_modules/visjs-network/examples
-	./list_bundled_nodejs_packages.py $(SOURCE_DIR) >> $@.manifest
-
-	# Create tarball
-	XZ_OPT=-9 tar \
-		--sort=name \
-		--mtime="@$(SOURCE_DATE_EPOCH)" --clamp-mtime \
-		--owner=0 --group=0 --numeric-owner \
-		-cJf $@ \
-		$(SOURCE_DIR)/vendor \
-		$$(find $(SOURCE_DIR) -type d -name "node_modules" -prune | LC_ALL=C sort)
-
-$(WEBPACK_TAR): $(VENDOR_TAR)
-	# Start with a clean state
-	rm -rf $(SOURCE_DIR)
-	tar pxf $(SOURCE_TAR)
-	tar pxf $(VENDOR_TAR)
-
-	# Patches to apply before creating the webpack
-	for patch in $(PATCHES_PRE_WEBPACK); do echo applying $$patch ...; patch -d $(SOURCE_DIR) -p1 --fuzz=0 < $$patch; done
-
-	# Build frontend
-	cd $(SOURCE_DIR) && \
-		../build_frontend.sh
-
-	# Create tarball
-	tar \
-		--sort=name \
-		--mtime="@$(SOURCE_DATE_EPOCH)" --clamp-mtime \
-		--owner=0 --group=0 --numeric-owner \
-		-czf $@ \
-		$(SOURCE_DIR)/public/build \
-		$(SOURCE_DIR)/public/views \
-		$(SOURCE_DIR)/plugins-bundled
-
-clean:
-	rm -rf *.tar.gz *.tar.xz *.manifest *.rpm $(NAME)-*/
diff --git a/SOURCES/build_frontend.sh b/SOURCES/build_frontend.sh
index fa0fb8e..1117e80 100755
--- a/SOURCES/build_frontend.sh
+++ b/SOURCES/build_frontend.sh
@@ -1,5 +1,8 @@
 #!/bin/bash -eu
 
+# Webpack needs more than the default 4GB RAM
+export NODE_OPTIONS="${NODE_OPTIONS:-} --max_old_space_size=6144"
+
 # Build the frontend
 yarn run build
 
diff --git a/SOURCES/create_bundles.sh b/SOURCES/create_bundles.sh
new file mode 100755
index 0000000..647ad5c
--- /dev/null
+++ b/SOURCES/create_bundles.sh
@@ -0,0 +1,85 @@
+#!/bin/bash -eux
+VERSION=$(rpm --specfile ./*.spec --qf '%{VERSION}\n' | head -1)
+RELEASE=$(rpm --specfile ./*.spec --qf '%{RELEASE}\n' | head -1 | cut -d. -f1)
+CHANGELOGTIME=$(rpm --specfile ./*.spec --qf '%{CHANGELOGTIME}\n' | head -1)
+SOURCE_DATE_EPOCH=$((CHANGELOGTIME - CHANGELOGTIME % 86400))
+
+SOURCE_DIR=grafana-$VERSION
+SOURCE_TAR=grafana-$VERSION.tar.gz
+VENDOR_TAR=grafana-vendor-$VERSION-$RELEASE.tar.xz
+WEBPACK_TAR=grafana-webpack-$VERSION-$RELEASE.tar.gz
+
+
+## Download and extract source tarball
+spectool -g grafana.spec
+rm -rf "${SOURCE_DIR}"
+tar xf "${SOURCE_TAR}"
+
+
+## Create vendor bundle
+pushd "${SOURCE_DIR}"
+
+# Vendor Go dependencies
+patch -p1 --fuzz=0 < ../0004-remove-unused-backend-dependencies.patch
+go mod vendor
+
+# Generate Go files
+make gen-go
+
+# Remove unused crypto
+rm -r vendor/golang.org/x/crypto/bcrypt
+rm -r vendor/golang.org/x/crypto/blowfish
+rm -r vendor/golang.org/x/crypto/cast5
+rm -r vendor/golang.org/x/crypto/openpgp/elgamal
+rm    vendor/golang.org/x/crypto/openpgp/packet/ocfb.go
+rm -r vendor/golang.org/x/crypto/pkcs12/internal/rc2
+
+# List bundled dependencies
+awk '$2 ~ /^v/ && $4 != "indirect" {print "Provides: bundled(golang(" $1 ")) = " substr($2, 2)}' go.mod | \
+    sed -E 's/=(.*)-(.*)-(.*)/=\1-\2.\3/g' > "../${VENDOR_TAR}.manifest"
+
+# Vendor Node.js dependencies
+patch -p1 --fuzz=0 < ../0005-remove-unused-frontend-crypto.patch
+export HUSKY=0
+yarn install --frozen-lockfile
+
+# Remove files with licensing issues
+find .yarn -name 'node-notifier' -prune -exec rm -r {} \;
+find .yarn -name 'nodemon' -prune -exec rm -r {} \;
+
+# List bundled dependencies
+../list_bundled_nodejs_packages.py . >> "../${VENDOR_TAR}.manifest"
+
+popd
+
+# Create tarball
+# shellcheck disable=SC2046
+XZ_OPT=-9 tar \
+    --sort=name \
+    --mtime="@${SOURCE_DATE_EPOCH}" --clamp-mtime \
+    --owner=0 --group=0 --numeric-owner \
+    -cJf "${VENDOR_TAR}" \
+    "${SOURCE_DIR}/vendor" \
+    $(find "${SOURCE_DIR}" -type f -name wire_gen.go | LC_ALL=C sort) \
+    "${SOURCE_DIR}/.pnp.cjs" \
+    "${SOURCE_DIR}/.yarn/cache" \
+    "${SOURCE_DIR}/.yarn/unplugged"
+
+
+## Create webpack
+pushd "${SOURCE_DIR}"
+../build_frontend.sh
+popd
+
+# Create tarball
+tar \
+    --sort=name \
+    --mtime="@${SOURCE_DATE_EPOCH}" --clamp-mtime \
+    --owner=0 --group=0 --numeric-owner \
+    -czf "${WEBPACK_TAR}" \
+    "${SOURCE_DIR}/plugins-bundled" \
+    "${SOURCE_DIR}/public/build" \
+    "${SOURCE_DIR}/public/img" \
+    "${SOURCE_DIR}/public/lib" \
+    "${SOURCE_DIR}/public/locales" \
+    "${SOURCE_DIR}/public/views"
diff --git a/SOURCES/create_bundles_in_container.sh b/SOURCES/create_bundles_in_container.sh
index c3a1ce4..bbed4ca 100755
--- a/SOURCES/create_bundles_in_container.sh
+++ b/SOURCES/create_bundles_in_container.sh
@@ -1,18 +1,23 @@
 #!/bin/bash -eu
 #
-# create vendor and webpack bundles inside a container for reproducibility
+# create vendor and webpack bundles inside a container (for reproducibility)
+# using a Go cache:
+#   ./create_bundles_in_container.sh --security-opt label=disable -v $(pwd)/.gocache:/root/go
 #
 
 cat <<EOF | podman build -t grafana-build -f - .
 FROM fedora:35
 
 RUN dnf upgrade -y && \
-    dnf install -y rpmdevtools python3-packaging make golang nodejs yarnpkg
+    dnf install -y rpmdevtools python3-packaging python3-pyyaml make golang nodejs yarnpkg
+
+# https://groups.google.com/g/golang-nuts/c/MVtHZUtZru4
+ENV GOPROXY=https://proxy.golang.org,direct
 
 WORKDIR /tmp/grafana-build
-COPY Makefile grafana.spec *.patch build_frontend.sh list_bundled_nodejs_packages.py .
+COPY grafana.spec create_bundles.sh build_frontend.sh list_bundled_nodejs_packages.py *.patch .
 RUN mkdir bundles
-CMD make && mv *.tar.* bundles
+CMD ./create_bundles.sh && mv *.tar.* bundles
 EOF
 
 podman run --name grafana-build --replace "$@" grafana-build
diff --git a/SOURCES/distro-defaults.ini b/SOURCES/distro-defaults.ini
deleted file mode 100644
index daa0679..0000000
--- a/SOURCES/distro-defaults.ini
+++ /dev/null
@@ -1,942 +0,0 @@
-##################### Grafana Configuration Defaults #####################
-#
-# Do not modify this file in grafana installs
-#
-
-# possible values : production, development
-app_mode = production
-
-# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
-instance_name = ${HOSTNAME}
-
-#################################### Paths ###############################
-[paths]
-# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
-data = /var/lib/grafana
-
-# Temporary files in `data` directory older than given duration will be removed
-temp_data_lifetime = 24h
-
-# Directory where grafana can store logs
-logs = /var/log/grafana
-
-# Directory where grafana will automatically scan and look for plugins
-plugins = /var/lib/grafana/plugins
-
-# folder that contains provisioning config files that grafana will apply on startup and while running.
-provisioning = /etc/grafana/provisioning
-
-#################################### Server ##############################
-[server]
-# Protocol (http, https, h2, socket)
-protocol = http
-
-# The ip address to bind to, empty will bind to all interfaces
-http_addr =
-
-# The http port to use
-http_port = 3000
-
-# The public facing domain name used to access grafana from a browser
-domain = localhost
-
-# Redirect to correct domain if host header does not match domain
-# Prevents DNS rebinding attacks
-enforce_domain = false
-
-# The full public facing url
-root_url = %(protocol)s://%(domain)s:%(http_port)s/
-
-# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
-serve_from_sub_path = false
-
-# Log web requests
-router_logging = false
-
-# the path relative working path
-static_root_path = public
-
-# enable gzip
-enable_gzip = false
-
-# https certs & key file
-cert_file =
-cert_key =
-
-# Unix socket path
-socket = /tmp/grafana.sock
-
-# CDN Url
-cdn_url =
-
-# Sets the maximum time in minutes before timing out read of an incoming request and closing idle connections.
-# `0` means there is no timeout for reading the request.
-read_timeout = 0
-
-#################################### Database ############################
-[database]
-# You can configure the database connection by specifying type, host, name, user and password
-# as separate properties or as on string using the url property.
-
-# Either "mysql", "postgres" or "sqlite3", it's your choice
-type = sqlite3
-host = 127.0.0.1:3306
-name = grafana
-user = root
-# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
-password =
-# Use either URL or the previous fields to configure the database
-# Example: mysql://user:secret@host:port/database
-url =
-
-# Max idle conn setting default is 2
-max_idle_conn = 2
-
-# Max conn setting default is 0 (mean not set)
-max_open_conn =
-
-# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours)
-conn_max_lifetime = 14400
-
-# Set to true to log the sql calls and execution times.
-log_queries =
-
-# For "postgres", use either "disable", "require" or "verify-full"
-# For "mysql", use either "true", "false", or "skip-verify".
-ssl_mode = disable
-
-# Database drivers may support different transaction isolation levels.
-# Currently, only "mysql" driver supports isolation levels.
-# If the value is empty - driver's default isolation level is applied.
-# For "mysql" use "READ-UNCOMMITTED", "READ-COMMITTED", "REPEATABLE-READ" or "SERIALIZABLE".
-isolation_level =
-
-ca_cert_path =
-client_key_path =
-client_cert_path =
-server_cert_name =
-
-# For "sqlite3" only, path relative to data_path setting
-path = grafana.db
-
-# For "sqlite3" only. cache mode setting used for connecting to the database
-cache_mode = private
-
-#################################### Cache server #############################
-[remote_cache]
-# Either "redis", "memcached" or "database" default is "database"
-type = database
-
-# cache connectionstring options
-# database: will use Grafana primary database.
-# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'.
-# memcache: 127.0.0.1:11211
-connstr =
-
-#################################### Data proxy ###########################
-[dataproxy]
-
-# This enables data proxy logging, default is false
-logging = false
-
-# How long the data proxy waits before timing out, default is 30 seconds.
-# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set.
-timeout = 30
-
-# How many seconds the data proxy waits before sending a keepalive request.
-keep_alive_seconds = 30
-
-# How many seconds the data proxy waits for a successful TLS Handshake before timing out.
-tls_handshake_timeout_seconds = 10
-
-# How many seconds the data proxy will wait for a server's first response headers after
-# fully writing the request headers if the request has an "Expect: 100-continue"
-# header. A value of 0 will result in the body being sent immediately, without
-# waiting for the server to approve.
-expect_continue_timeout_seconds = 1
-
-# Optionally limits the total number of connections per host, including connections in the dialing,
-# active, and idle states. On limit violation, dials will block.
-# A value of zero (0) means no limit.
-max_conns_per_host = 0
-
-# The maximum number of idle connections that Grafana will keep alive.
-max_idle_connections = 100
-
-# The maximum number of idle connections per host that Grafana will keep alive.
-max_idle_connections_per_host = 2
-
-# How many seconds the data proxy keeps an idle connection open before timing out.
-idle_conn_timeout_seconds = 90
-
-# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request.
-send_user_header = false
-
-#################################### Analytics ###########################
-[analytics]
-# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
-# No ip addresses are being tracked, only simple counters to track
-# running instances, dashboard and error counts. It is very helpful to us.
-# Change this option to false to disable reporting.
-reporting_enabled = false
-
-# The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs
-reporting_distributor = grafana-labs
-
-# Set to false to disable all checks to https://grafana.com
-# for new versions (grafana itself and plugins), check is used
-# in some UI views to notify that grafana or plugin update exists
-# This option does not cause any auto updates, nor send any information
-# only a GET request to https://grafana.com to get latest versions
-check_for_updates = false
-
-# Google Analytics universal tracking code, only enabled if you specify an id here
-google_analytics_ua_id =
-
-# Google Tag Manager ID, only enabled if you specify an id here
-google_tag_manager_id =
-
-#################################### Security ############################
-[security]
-# disable creation of admin user on first start of grafana
-disable_initial_admin_creation = false
-
-# default admin user, created on startup
-admin_user = admin
-
-# default admin password, can be changed before first start of grafana, or in profile settings
-admin_password = admin
-
-# used for signing
-secret_key = SW2YcwTIb9zpOOhoPsMm
-
-# disable gravatar profile images
-disable_gravatar = false
-
-# data source proxy whitelist (ip_or_domain:port separated by spaces)
-data_source_proxy_whitelist =
-
-# disable protection against brute force login attempts
-disable_brute_force_login_protection = false
-
-# set to true if you host Grafana behind HTTPS. default is false.
-cookie_secure = false
-
-# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
-cookie_samesite = lax
-
-# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false.
-allow_embedding = false
-
-# Set to true if you want to enable http strict transport security (HSTS) response header.
-# This is only sent when HTTPS is enabled in this configuration.
-# HSTS tells browsers that the site should only be accessed using HTTPS.
-strict_transport_security = false
-
-# Sets how long a browser should cache HSTS. Only applied if strict_transport_security is enabled.
-strict_transport_security_max_age_seconds = 86400
-
-# Set to true if to enable HSTS preloading option. Only applied if strict_transport_security is enabled.
-strict_transport_security_preload = false
-
-# Set to true if to enable the HSTS includeSubDomains option. Only applied if strict_transport_security is enabled.
-strict_transport_security_subdomains = false
-
-# Set to true to enable the X-Content-Type-Options response header.
-# The X-Content-Type-Options response HTTP header is a marker used by the server to indicate that the MIME types advertised
-# in the Content-Type headers should not be changed and be followed.
-x_content_type_options = true
-
-# Set to true to enable the X-XSS-Protection header, which tells browsers to stop pages from loading
-# when they detect reflected cross-site scripting (XSS) attacks.
-x_xss_protection = true
-
-# Enable adding the Content-Security-Policy header to your requests.
-# CSP allows to control resources the user agent is allowed to load and helps prevent XSS attacks.
-content_security_policy = false
-
-# Set Content Security Policy template used when adding the Content-Security-Policy header to your requests.
-# $NONCE in the template includes a random nonce.
-content_security_policy_template = """script-src 'unsafe-eval' 'strict-dynamic' $NONCE;object-src 'none';font-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data:;base-uri 'self';connect-src 'self' grafana.com;manifest-src 'self';media-src 'none';form-action 'self';"""
-
-#################################### Snapshots ###########################
-[snapshots]
-# snapshot sharing options
-external_enabled = false
-external_snapshot_url = https://snapshots-origin.raintank.io
-external_snapshot_name = Publish to snapshot.raintank.io
-
-# Set to true to enable this Grafana instance act as an external snapshot server and allow unauthenticated requests for
-# creating and deleting snapshots.
-public_mode = false
-
-# remove expired snapshot
-snapshot_remove_expired = true
-
-#################################### Dashboards ##################
-
-[dashboards]
-# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
-versions_to_keep = 20
-
-# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
-# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
-min_refresh_interval = 1s
-
-# Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
-default_home_dashboard_path =
-
-################################### Data sources #########################
-[datasources]
-# Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API.
-datasource_limit = 5000
-
-#################################### Users ###############################
-[users]
-# disable user signup / registration
-allow_sign_up = false
-
-# Allow non admin users to create organizations
-allow_org_create = false
-
-# Set to true to automatically assign new users to the default organization (id 1)
-auto_assign_org = true
-
-# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
-auto_assign_org_id = 1
-
-# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
-auto_assign_org_role = Viewer
-
-# Require email validation before sign up completes
-verify_email_enabled = false
-
-# Background text for the user field on the login page
-login_hint = email or username
-password_hint = password
-
-# Default UI theme ("dark" or "light")
-default_theme = dark
-
-# Path to a custom home page. Users are only redirected to this if the default home dashboard is used. It should match a frontend route and contain a leading slash.
-home_page =
-
-# External user management
-external_manage_link_url =
-external_manage_link_name =
-external_manage_info =
-
-# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard.
-viewers_can_edit = false
-
-# Editors can administrate dashboard, folders and teams they create
-editors_can_admin = false
-
-# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes).
-user_invite_max_lifetime_duration = 24h
-
-# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
-hidden_users =
-
-[auth]
-# Login cookie name
-login_cookie_name = grafana_session
-
-# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes).
-login_maximum_inactive_lifetime_duration =
-
-# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month).
-login_maximum_lifetime_duration =
-
-# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes.
-token_rotation_interval_minutes = 10
-
-# Set to true to disable (hide) the login form, useful if you use OAuth
-disable_login_form = false
-
-# Set to true to disable the signout link in the side menu. useful if you use auth.proxy
-disable_signout_menu = false
-
-# URL to redirect the user to after sign out
-signout_redirect_url =
-
-# Set to true to attempt login with OAuth automatically, skipping the login screen.
-# This setting is ignored if multiple OAuth providers are configured.
-oauth_auto_login = false
-
-# OAuth state max age cookie duration in seconds. Defaults to 600 seconds.
-oauth_state_cookie_max_age = 600
-
-# limit of api_key seconds to live before expiration
-api_key_max_seconds_to_live = -1
-
-# Set to true to enable SigV4 authentication option for HTTP-based datasources
-sigv4_auth_enabled = false
-
-#################################### Anonymous Auth ######################
-[auth.anonymous]
-# enable anonymous access
-enabled = false
-
-# specify organization name that should be used for unauthenticated users
-org_name = Main Org.
-
-# specify role for unauthenticated users
-org_role = Viewer
-
-# mask the Grafana version number for unauthenticated users
-hide_version = false
-
-#################################### GitHub Auth #########################
-[auth.github]
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = user:email,read:org
-auth_url = https://github.com/login/oauth/authorize
-token_url = https://github.com/login/oauth/access_token
-api_url = https://api.github.com/user
-allowed_domains =
-team_ids =
-allowed_organizations =
-
-#################################### GitLab Auth #########################
-[auth.gitlab]
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = api
-auth_url = https://gitlab.com/oauth/authorize
-token_url = https://gitlab.com/oauth/token
-api_url = https://gitlab.com/api/v4
-allowed_domains =
-allowed_groups =
-
-#################################### Google Auth #########################
-[auth.google]
-enabled = false
-allow_sign_up = true
-client_id = some_client_id
-client_secret =
-scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
-auth_url = https://accounts.google.com/o/oauth2/auth
-token_url = https://accounts.google.com/o/oauth2/token
-api_url = https://www.googleapis.com/oauth2/v1/userinfo
-allowed_domains =
-hosted_domain =
-
-#################################### Grafana.com Auth ####################
-# legacy key names (so they work in env variables)
-[auth.grafananet]
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = user:email
-allowed_organizations =
-
-[auth.grafana_com]
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = user:email
-allowed_organizations =
-
-#################################### Azure AD OAuth #######################
-[auth.azuread]
-name = Azure AD
-enabled = false
-allow_sign_up = true
-client_id = some_client_id
-client_secret =
-scopes = openid email profile
-auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
-token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
-allowed_domains =
-allowed_groups =
-
-#################################### Okta OAuth #######################
-[auth.okta]
-name = Okta
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = openid profile email groups
-auth_url = https://<tenant-id>.okta.com/oauth2/v1/authorize
-token_url = https://<tenant-id>.okta.com/oauth2/v1/token
-api_url = https://<tenant-id>.okta.com/oauth2/v1/userinfo
-allowed_domains =
-allowed_groups =
-role_attribute_path =
-
-#################################### Generic OAuth #######################
-[auth.generic_oauth]
-name = OAuth
-enabled = false
-allow_sign_up = true
-client_id = some_id
-client_secret =
-scopes = user:email
-email_attribute_name = email:primary
-email_attribute_path =
-login_attribute_path =
-name_attribute_path =
-role_attribute_path =
-id_token_attribute_name =
-auth_url =
-token_url =
-api_url =
-allowed_domains =
-team_ids =
-allowed_organizations =
-tls_skip_verify_insecure = false
-tls_client_cert =
-tls_client_key =
-tls_client_ca =
-
-#################################### Basic Auth ##########################
-[auth.basic]
-enabled = true
-
-#################################### Auth Proxy ##########################
-[auth.proxy]
-enabled = false
-header_name = X-WEBAUTH-USER
-header_property = username
-auto_sign_up = true
-# Deprecated, use sync_ttl instead
-ldap_sync_ttl = 60
-sync_ttl = 60
-whitelist =
-headers =
-enable_login_token = false
-
-#################################### Auth LDAP ###########################
-[auth.ldap]
-enabled = false
-config_file = /etc/grafana/ldap.toml
-allow_sign_up = true
-
-# LDAP background sync (Enterprise only)
-# At 1 am every day
-sync_cron = "0 0 1 * * *"
-active_sync_enabled = true
-
-#################################### AWS ###########################
-[aws]
-# Enter a comma-separated list of allowed AWS authentication providers.
-# Options are: default (AWS SDK Default), keys (Access && secret key), credentials (Credentials field), ec2_iam_role (EC2 IAM Role)
-allowed_auth_providers = default,keys,credentials
-
-# Allow AWS users to assume a role using temporary security credentials.
-# If true, assume role will be enabled for all AWS authentication providers that are specified in aws_auth_providers
-assume_role_enabled = true
-
-# Specify max no of pages to be returned by the ListMetricPages API
-list_metrics_page_limit = 500
-
-#################################### SMTP / Emailing #####################
-[smtp]
-enabled = false
-host = localhost:25
-user =
-# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
-password =
-cert_file =
-key_file =
-skip_verify = false
-from_address = admin@grafana.localhost
-from_name = Grafana
-ehlo_identity =
-startTLS_policy =
-
-[emails]
-welcome_email_on_sign_up = false
-templates_pattern = emails/*.html
-
-#################################### Logging ##########################
-[log]
-# Either "console", "file", "syslog". Default is console and file
-# Use space to separate multiple modes, e.g. "console file"
-mode = console file
-
-# Either "debug", "info", "warn", "error", "critical", default is "info"
-level = info
-
-# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
-filters =
-
-# For "console" mode only
-[log.console]
-level =
-
-# log line format, valid options are text, console and json
-format = console
-
-# For "file" mode only
-[log.file]
-level =
-
-# log line format, valid options are text, console and json
-format = text
-
-# This enables automated log rotate(switch of following options), default is true
-log_rotate = true
-
-# Max line number of single file, default is 1000000
-max_lines = 1000000
-
-# Max size shift of single file, default is 28 means 1 << 28, 256MB
-max_size_shift = 28
-
-# Segment log daily, default is true
-daily_rotate = true
-
-# Expired days of log file(delete after max days), default is 7
-max_days = 7
-
-[log.syslog]
-level =
-
-# log line format, valid options are text, console and json
-format = text
-
-# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
-network =
-address =
-
-# Syslog facility. user, daemon and local0 through local7 are valid.
-facility =
-
-# Syslog tag. By default, the process' argv[0] is used.
-tag =
-
-[log.frontend]
-# Should Sentry javascript agent be initialized
-enabled = false
-
-# Sentry DSN if you want to send events to Sentry.
-sentry_dsn =
-
-# Custom HTTP endpoint to send events captured by the Sentry agent to. Default will log the events to stdout.
-custom_endpoint = /log
-
-# Rate of events to be reported between 0 (none) and 1 (all), float
-sample_rate = 1.0
-
-# Requests per second limit enforced per an extended period, for Grafana backend log ingestion endpoint (/log).
-log_endpoint_requests_per_second_limit = 3
-
-# Max requests accepted per short interval of time for Grafana backend log ingestion endpoint (/log)
-log_endpoint_burst_limit = 15
-
-#################################### Usage Quotas ########################
-[quota]
-enabled = false
-
-#### set quotas to -1 to make unlimited. ####
-# limit number of users per Org.
-org_user = 10
-
-# limit number of dashboards per Org.
-org_dashboard = 100
-
-# limit number of data_sources per Org.
-org_data_source = 10
-
-# limit number of api_keys per Org.
-org_api_key = 10
-
-# limit number of orgs a user can create.
-user_org = 10
-
-# Global limit of users.
-global_user = -1
-
-# global limit of orgs.
-global_org = -1
-
-# global limit of dashboards
-global_dashboard = -1
-
-# global limit of api_keys
-global_api_key = -1
-
-# global limit on number of logged in users.
-global_session = -1
-
-#################################### Alerting ############################
-[alerting]
-# Disable alerting engine & UI features
-enabled = true
-# Makes it possible to turn off alert rule execution but alerting UI is visible
-execute_alerts = true
-
-# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
-error_or_timeout = alerting
-
-# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
-nodata_or_nullvalues = no_data
-
-# Alert notifications can include images, but rendering many images at the same time can overload the server
-# This limit will protect the server from render overloading and make sure notifications are sent out quickly
-concurrent_render_limit = 5
-
-# Default setting for alert calculation timeout. Default value is 30
-evaluation_timeout_seconds = 30
-
-# Default setting for alert notification timeout. Default value is 30
-notification_timeout_seconds = 30
-
-# Default setting for max attempts to sending alert notifications. Default value is 3
-max_attempts = 3
-
-# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend
-min_interval_seconds = 1
-
-# Configures for how long alert annotations are stored. Default is 0, which keeps them forever.
-# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month).
-max_annotation_age =
-
-# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations.
-max_annotations_to_keep =
-
-#################################### Annotations #########################
-[annotations]
-# Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
-cleanupjob_batchsize = 100
-
-[annotations.dashboard]
-# Dashboard annotations means that annotations are associated with the dashboard they are created on.
-
-# Configures how long dashboard annotations are stored. Default is 0, which keeps them forever.
-# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
-max_age =
-
-# Configures max number of dashboard annotations that Grafana stores. Default value is 0, which keeps all dashboard annotations.
-max_annotations_to_keep =
-
-[annotations.api]
-# API annotations means that the annotations have been created using the API without any
-# association with a dashboard.
-
-# Configures how long Grafana stores API annotations. Default is 0, which keeps them forever.
-# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
-max_age =
-
-# Configures max number of API annotations that Grafana keeps. Default value is 0, which keeps all API annotations.
-max_annotations_to_keep =
-
-#################################### Explore #############################
-[explore]
-# Enable the Explore section
-enabled = true
-
-#################################### Internal Grafana Metrics ############
-# Metrics available at HTTP API Url /metrics
-[metrics]
-enabled              = true
-interval_seconds     = 10
-# Disable total stats (stat_totals_*) metrics to be generated
-disable_total_stats = false
-
-#If both are set, basic auth will be required for the metrics endpoint.
-basic_auth_username =
-basic_auth_password =
-
-# Metrics environment info adds dimensions to the `grafana_environment_info` metric, which
-# can expose more information about the Grafana instance.
-[metrics.environment_info]
-#exampleLabel1 = exampleValue1
-#exampleLabel2 = exampleValue2
-
-# Send internal Grafana metrics to graphite
-[metrics.graphite]
-# Enable by setting the address setting (ex localhost:2003)
-address =
-prefix = prod.grafana.%(instance_name)s.
-
-#################################### Grafana.com integration  ##########################
-[grafana_net]
-url = https://grafana.com
-
-[grafana_com]
-url = https://grafana.com
-
-#################################### Distributed tracing ############
-[tracing.jaeger]
-# jaeger destination (ex localhost:6831)
-address =
-# tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2)
-always_included_tag =
-# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote
-sampler_type = const
-# jaeger samplerconfig param
-# for "const" sampler, 0 or 1 for always false/true respectively
-# for "probabilistic" sampler, a probability between 0 and 1
-# for "rateLimiting" sampler, the number of spans per second
-# for "remote" sampler, param is the same as for "probabilistic"
-# and indicates the initial sampling rate before the actual one
-# is received from the mothership
-sampler_param = 1
-# sampling_server_url is the URL of a sampling manager providing a sampling strategy.
-sampling_server_url =
-# Whether or not to use Zipkin span propagation (x-b3- HTTP headers).
-zipkin_propagation = false
-# Setting this to true disables shared RPC spans.
-# Not disabling is the most common setting when using Zipkin elsewhere in your infrastructure.
-disable_shared_zipkin_spans = false
-
-#################################### External Image Storage ##############
-[external_image_storage]
-# Used for uploading images to public servers so they can be included in slack/email messages.
-# You can choose between (s3, webdav, gcs, azure_blob, local)
-provider =
-
-[external_image_storage.s3]
-endpoint =
-path_style_access =
-bucket_url =
-bucket =
-region =
-path =
-access_key =
-secret_key =
-
-[external_image_storage.webdav]
-url =
-username =
-password =
-public_url =
-
-[external_image_storage.gcs]
-key_file =
-bucket =
-path =
-enable_signed_urls = false
-signed_url_expiration =
-
-[external_image_storage.azure_blob]
-account_name =
-account_key =
-container_name =
-
-[external_image_storage.local]
-# does not require any configuration
-
-[rendering]
-# Options to configure a remote HTTP image rendering service, e.g. using https://github.com/grafana/grafana-image-renderer.
-# URL to a remote HTTP image renderer service, e.g. http://localhost:8081/render, will enable Grafana to render panels and dashboards to PNG-images using HTTP requests to an external service.
-server_url =
-# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
-callback_url =
-# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
-# which this setting can help protect against by only allowing a certain amount of concurrent requests.
-concurrent_render_request_limit = 30
-
-[panels]
-# here for to support old env variables, can remove after a few months
-enable_alpha = false
-disable_sanitize_html = false
-
-[plugins]
-enable_alpha = false
-app_tls_skip_verify_insecure = false
-# Enter a comma-separated list of plugin identifiers to identify plugins that are allowed to be loaded even if they lack a valid signature.
-allow_loading_unsigned_plugins = pcp-redis-datasource
-marketplace_url = https://grafana.com/grafana/plugins/
-
-#################################### Grafana Image Renderer Plugin ##########################
-[plugin.grafana-image-renderer]
-# Instruct headless browser instance to use a default timezone when not provided by Grafana, e.g. when rendering panel image of alert.
-# See ICU’s metaZones.txt (https://cs.chromium.org/chromium/src/third_party/icu/source/data/misc/metaZones.txt) for a list of supported
-# timezone IDs. Fallbacks to TZ environment variable if not set.
-rendering_timezone =
-
-# Instruct headless browser instance to use a default language when not provided by Grafana, e.g. when rendering panel image of alert.
-# Please refer to the HTTP header Accept-Language to understand how to format this value, e.g. 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'.
-rendering_language =
-
-# Instruct headless browser instance to use a default device scale factor when not provided by Grafana, e.g. when rendering panel image of alert.
-# Default is 1. Using a higher value will produce more detailed images (higher DPI), but will require more disk space to store an image.
-rendering_viewport_device_scale_factor =
-
-# Instruct headless browser instance whether to ignore HTTPS errors during navigation. Per default HTTPS errors are not ignored. Due to
-# the security risk it's not recommended to ignore HTTPS errors.
-rendering_ignore_https_errors =
-
-# Instruct headless browser instance whether to capture and log verbose information when rendering an image. Default is false and will
-# only capture and log error messages. When enabled, debug messages are captured and logged as well.
-# For the verbose information to be included in the Grafana server log you have to adjust the rendering log level to debug, configure
-# [log].filter = rendering:debug.
-rendering_verbose_logging =
-
-# Instruct headless browser instance whether to output its debug and error messages into running process of remote rendering service.
-# Default is false. This can be useful to enable (true) when troubleshooting.
-rendering_dumpio =
-
-# Additional arguments to pass to the headless browser instance. Default is --no-sandbox. The list of Chromium flags can be found
-# here (https://peter.sh/experiments/chromium-command-line-switches/). Multiple arguments is separated with comma-character.
-rendering_args =
-
-# You can configure the plugin to use a different browser binary instead of the pre-packaged version of Chromium.
-# Please note that this is not recommended, since you may encounter problems if the installed version of Chrome/Chromium is not
-# compatible with the plugin.
-rendering_chrome_bin =
-
-# Instruct how headless browser instances are created. Default is 'default' and will create a new browser instance on each request.
-# Mode 'clustered' will make sure that only a maximum of browsers/incognito pages can execute concurrently.
-# Mode 'reusable' will have one browser instance and will create a new incognito page on each request.
-rendering_mode =
-
-# When rendering_mode = clustered you can instruct how many browsers or incognito pages can execute concurrently. Default is 'browser'
-# and will cluster using browser instances.
-# Mode 'context' will cluster using incognito pages.
-rendering_clustering_mode =
-# When rendering_mode = clustered you can define maximum number of browser instances/incognito pages that can execute concurrently..
-rendering_clustering_max_concurrency =
-
-# Limit the maximum viewport width, height and device scale factor that can be requested.
-rendering_viewport_max_width =
-rendering_viewport_max_height =
-rendering_viewport_max_device_scale_factor =
-
-# Change the listening host and port of the gRPC server. Default host is 127.0.0.1 and default port is 0 and will automatically assign
-# a port not in use.
-grpc_host =
-grpc_port =
-
-[enterprise]
-license_path =
-
-[feature_toggles]
-# enable features, separated by spaces
-enable =
-
-[date_formats]
-# For information on what formatting patterns that are supported https://momentjs.com/docs/#/displaying/
-
-# Default system date format used in time range picker and other places where full time is displayed
-full_date = YYYY-MM-DD HH:mm:ss
-
-# Used by graph and other places where we only show small intervals
-interval_second = HH:mm:ss
-interval_minute = HH:mm
-interval_hour = MM/DD HH:mm
-interval_day = MM/DD
-interval_month = YYYY-MM
-interval_year = YYYY
-
-# Experimental feature
-use_browser_locale = false
-
-# Default timezone for user preferences. Options are 'browser' for the browser local timezone or a timezone name from IANA Time Zone database, e.g. 'UTC' or 'Europe/Amsterdam' etc.
-default_timezone = browser
-
-[expressions]
-# Enable or disable the expressions functionality.
-enabled = true
diff --git a/SOURCES/grafana.sysusers b/SOURCES/grafana.sysusers
new file mode 100644
index 0000000..7c4a4d5
--- /dev/null
+++ b/SOURCES/grafana.sysusers
@@ -0,0 +1,2 @@
+#Type Name    ID GECOS                  Home directory
+u     grafana -  "Grafana user account" /usr/share/grafana
diff --git a/SOURCES/list_bundled_nodejs_packages.py b/SOURCES/list_bundled_nodejs_packages.py
index 76fe443..2a30201 100755
--- a/SOURCES/list_bundled_nodejs_packages.py
+++ b/SOURCES/list_bundled_nodejs_packages.py
@@ -5,7 +5,7 @@
 import os
 import sys
 import json
-import re
+import yaml
 from packaging import version
 
 
@@ -26,14 +26,14 @@ def read_declared_pkgs(package_json_path):
 
 def read_installed_pkgs(yarn_lock_path):
     with open(yarn_lock_path) as f:
-        lockfile = f.read()
-        return re.findall(
-            r'^"?'  # can start with a "
-            r"(.+?)@.+(?:,.*)?:\n"  # characters up to @
-            r'  version "(.+)"',  # and the version
-            lockfile,
-            re.MULTILINE,
-        )
+        lockfile = yaml.safe_load(f)
+        for pkg_decl, meta in lockfile.items():
+            for pkg in pkg_decl.split(", "):
+                if ":" not in pkg:
+                    continue
+                pkg_name = pkg[: pkg.index("@", 1)]
+                pkg_version = meta["version"]
+                yield (pkg_name, pkg_version)
 
 
 def list_provides(declared_pkgs, installed_pkgs):
@@ -61,10 +61,10 @@ if __name__ == "__main__":
         sys.exit(1)
 
     package_dir = sys.argv[1]
-    declared_pkgs = []
+    declared_pkgs = set()
     for package_json_path in scan_package_json(package_dir):
-        declared_pkgs.extend(read_declared_pkgs(package_json_path))
-    installed_pkgs = read_installed_pkgs(f"{package_dir}/yarn.lock")
+        declared_pkgs.update(read_declared_pkgs(package_json_path))
+    installed_pkgs = list(read_installed_pkgs(f"{package_dir}/yarn.lock"))
     provides = list_provides(declared_pkgs, installed_pkgs)
     for provide in sorted(provides):
         print(provide)
diff --git a/SPECS/grafana.spec b/SPECS/grafana.spec
index ab780df..4ebe726 100644
--- a/SPECS/grafana.spec
+++ b/SPECS/grafana.spec
@@ -1,11 +1,11 @@
-# gobuild and gotest macros are not available on CentOS Stream
-# remove once BZ 1965292 is resolved
-# definitions lifted from Fedora 34 podman.spec
-%if ! 0%{?gobuild:1}
-%define gobuild(o:) GO111MODULE=off go build -buildmode pie -compiler gc -tags="rpm_crashtraceback ${BUILDTAGS:-}" -ldflags "${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld '" -a -v -x %{?**};
-%endif
-%if ! 0%{?gotest:1}
-%define gotest() GO111MODULE=off go test -buildmode pie -compiler gc -ldflags "${LDFLAGS:-} -extldflags '-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld '" %{?**};
+# Specify if the frontend will be compiled as part of the build or
+# is attached as a webpack tarball (in case of an unsuitable nodejs version on the build system)
+%define compile_frontend 0
+
+%if 0%{?rhel}
+%define enable_fips_mode 1
+%else
+%define enable_fips_mode 0
 %endif
 
 %global grafana_arches %{lua: go_arches = {}
@@ -18,21 +18,14 @@
   end
 end}
 
-# Specify if the frontend will be compiled as part of the build or
-# is attached as a webpack tarball (in case of an unsuitable nodejs version on the build system)
-%define compile_frontend 0
-
-%if 0%{?rhel}
-%define enable_fips_mode 1
-%else
-%define enable_fips_mode 0
-%endif
+%global gomodulesmode GO111MODULE=auto
+%global gotestflags   %{gotestflags} -tags=integration
 
 Name:             grafana
-Version:          7.5.15
-Release:          3%{?dist}
+Version:          9.0.9
+Release:          2%{?dist}
 Summary:          Metrics dashboard and graph editor
-License:          ASL 2.0
+License:          AGPLv3
 URL:              https://grafana.org
 
 # Source0 contains the tagged upstream sources
@@ -50,11 +43,11 @@ Source1:          grafana-vendor-%{version}-1.tar.xz
 Source2:          grafana-webpack-%{version}-1.tar.gz
 %endif
 
-# Source3 contains Grafana configuration defaults for distributions
-Source3:          distro-defaults.ini
+# Source3 contains the systemd-sysusers configuration
+Source3:          grafana.sysusers
 
-# Source4 contains the Makefile to create the vendor and webpack bundles
-Source4:          Makefile
+# Source4 contains the script to create the vendor and webpack bundles
+Source4:          create_bundles.sh
 
 # Source5 contains the script to build the frontend
 Source5:          build_frontend.sh
@@ -65,73 +58,54 @@ Source6:          list_bundled_nodejs_packages.py
 # Source7 contains the script to create the vendor and webpack bundles in a container
 Source7:          create_bundles_in_container.sh
 
-# Patches
-Patch1:           001-wrappers-grafana-cli.patch
-Patch2:           002-manpages.patch
-
-# resolve symlinks before comparing paths
-# BUILD/src/github.com/grafana/grafana -> BUILD/grafana-X.Y.Z
-Patch3:           003-fix-dashboard-abspath-test.patch
-
-# Required for s390x
-# the golden files include memory dumps from a x86 machine
-# integers are stored as little endian on x86, but as big endian on s390x
-# therefore loading this memory dump fails on s390x
-Patch4:           004-skip-x86-goldenfiles-tests.patch
-
-Patch5:           005-remove-unused-dependencies.patch
-
-Patch6:           006-fix-gtime-test-32bit.patch
-
-Patch8:           008-remove-unused-frontend-crypto.patch
-
-# The Makefile removes a few files with crypto implementations
-# from the vendor tarball, which are not used in Grafana.
-# This patch removes all references to the deleted files.
-Patch9:           009-patch-unused-backend-crypto.patch
-
-# This patch modifies the x/crypto/pbkdf2 function to use OpenSSL
-# if FIPS mode is enabled.
-Patch10:          010-fips.patch
-
-Patch11:          011-use-hmac-sha-256-for-password-reset-tokens.patch
-
-Patch12:          012-support-go1.18.patch
-
-Patch13:          013-CVE-2021-23648.patch
-
-Patch14:          014-CVE-2022-21698.patch
-Patch15:          015-CVE-2022-21698.vendor.patch
-Patch16:          016-fix-CVE-2022-31107.patch
+# Patches affecting the source tarball
+Patch1:           0001-update-grafana-cli-script-with-distro-specific-paths.patch
+Patch2:           0002-add-manpages.patch
+Patch3:           0003-update-default-configuration.patch
+Patch4:           0004-remove-unused-backend-dependencies.patch
+Patch5:           0005-remove-unused-frontend-crypto.patch
+# https://github.com/grafana/grafana/pull/42334
+Patch6:           0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch
+Patch7:           0007-skip-marketplace-plugin-install-test.patch
+# https://github.com/grafana/grafana/pull/51508
+Patch8:           0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
+Patch9:           0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch
+Patch10:	  0010-v9.0.x-Login-email-before-username-57406.patch
+
+# Patches affecting the vendor tarball
+Patch1001:        1001-vendor-patch-removed-backend-crypto.patch
+Patch1002:        1002-vendor-use-pbkdf2-from-OpenSSL.patch
+Patch1003:        1003-vendor-skip-goldenfiles-tests.patch
 
 # Intersection of go_arches and nodejs_arches
 ExclusiveArch:    %{grafana_arches}
 
-BuildRequires:    systemd, golang, go-srpm-macros
-%if 0%{?fedora} >= 31
+BuildRequires:    systemd
+BuildRequires:    systemd-rpm-macros
+BuildRequires:    golang >= 1.17
+BuildRequires:    go-srpm-macros
 BuildRequires:    go-rpm-macros
-%endif
 
 %if %{compile_frontend}
-BuildRequires:    nodejs >= 1:14, yarnpkg
+BuildRequires:    nodejs >= 1:16
+BuildRequires:    yarnpkg
 %endif
 
 %if %{enable_fips_mode}
 BuildRequires:    openssl-devel
 %endif
 
-# omit golang debugsource, see BZ995136 and related
-%global           dwz_low_mem_die_limit 0
-%global           _debugsource_template %{nil}
-
 %global           GRAFANA_USER %{name}
 %global           GRAFANA_GROUP %{name}
-%global           GRAFANA_HOME %{_datadir}/%{name}
 
 # grafana-server service daemon uses systemd
 %{?systemd_requires}
 Requires(pre):    shadow-utils
 
+# Grafana queries the mime database (through mime.TypeByExtension, in a unit test and at runtime)
+BuildRequires:    shared-mime-info
+Requires:         shared-mime-info
+
 %if 0%{?fedora} || 0%{?rhel} > 7
 Recommends: grafana-pcp
 %endif
@@ -165,594 +139,546 @@ Provides:         grafana-stackdriver = 7.3.6-1
 # this is for security purposes, if nodejs-foo ever needs an update,
 # affected packages can be easily identified.
 # Note: generated by the Makefile (see README.md)
-Provides: bundled(golang(cloud.google.com/go/storage)) = 1.13.0
+Provides: bundled(golang(cloud.google.com/go/storage)) = 1.21.0
+Provides: bundled(golang(cuelang.org/go)) = 0.4.3
+Provides: bundled(golang(github.com/Azure/azure-sdk-for-go)) = 59.3.0+incompatible
+Provides: bundled(golang(github.com/Azure/go-autorest/autorest)) = 0.11.22
 Provides: bundled(golang(github.com/BurntSushi/toml)) = 0.3.1
+Provides: bundled(golang(github.com/Masterminds/semver)) = 1.5.0
 Provides: bundled(golang(github.com/VividCortex/mysqlerr)) = 0.0.0-20170204212430.6c6b55f8796f
-Provides: bundled(golang(github.com/aws/aws-sdk-go)) = 1.37.20
+Provides: bundled(golang(github.com/aws/aws-sdk-go)) = 1.44.9
 Provides: bundled(golang(github.com/beevik/etree)) = 1.1.0
-Provides: bundled(golang(github.com/benbjohnson/clock)) = 0.0.0-20161215174838.7dc76406b6d3
+Provides: bundled(golang(github.com/benbjohnson/clock)) = 1.1.0
 Provides: bundled(golang(github.com/bradfitz/gomemcache)) = 0.0.0-20190913173617.a41fca850d0b
-Provides: bundled(golang(github.com/centrifugal/centrifuge)) = 0.13.0
-Provides: bundled(golang(github.com/cortexproject/cortex)) = 1.4.1-0.20201022071705.85942c5703cf
+Provides: bundled(golang(github.com/centrifugal/centrifuge)) = 0.19.0
+Provides: bundled(golang(github.com/cortexproject/cortex)) = 1.10.1-0.20211014125347.85c378182d0d
 Provides: bundled(golang(github.com/davecgh/go-spew)) = 1.1.1
-Provides: bundled(golang(github.com/denisenkom/go-mssqldb)) = 0.0.0-20200910202707.1e08a3fab204
-Provides: bundled(golang(github.com/facebookgo/inject)) = 0.0.0-20180706035515.f23751cae28b
-Provides: bundled(golang(github.com/fatih/color)) = 1.10.0
+Provides: bundled(golang(github.com/denisenkom/go-mssqldb)) = 0.12.0
+Provides: bundled(golang(github.com/dop251/goja)) = 0.0.0-20210804101310.32956a348b49
+Provides: bundled(golang(github.com/fatih/color)) = 1.13.0
 Provides: bundled(golang(github.com/gchaincl/sqlhooks)) = 1.3.0
-Provides: bundled(golang(github.com/getsentry/sentry-go)) = 0.10.0
-Provides: bundled(golang(github.com/go-macaron/binding)) = 0.0.0-20190806013118.0b4f37bab25b
-Provides: bundled(golang(github.com/go-macaron/gzip)) = 0.0.0-20160222043647.cad1c6580a07
+Provides: bundled(golang(github.com/getsentry/sentry-go)) = 0.13.0
+Provides: bundled(golang(github.com/go-kit/kit)) = 0.11.0
+Provides: bundled(golang(github.com/go-openapi/strfmt)) = 0.20.2
+Provides: bundled(golang(github.com/go-redis/redis/v8)) = 8.11.4
 Provides: bundled(golang(github.com/go-sourcemap/sourcemap)) = 2.1.3+incompatible
-Provides: bundled(golang(github.com/go-sql-driver/mysql)) = 1.5.0
+Provides: bundled(golang(github.com/go-sql-driver/mysql)) = 1.6.0
 Provides: bundled(golang(github.com/go-stack/stack)) = 1.8.0
 Provides: bundled(golang(github.com/gobwas/glob)) = 0.2.3
-Provides: bundled(golang(github.com/golang/mock)) = 1.5.0
-Provides: bundled(golang(github.com/golang/protobuf)) = 1.4.3
-Provides: bundled(golang(github.com/google/go-cmp)) = 0.5.7
-Provides: bundled(golang(github.com/google/uuid)) = 1.2.0
+Provides: bundled(golang(github.com/gofrs/uuid)) = 4.0.0+incompatible
+Provides: bundled(golang(github.com/gogo/protobuf)) = 1.3.2
+Provides: bundled(golang(github.com/golang/mock)) = 1.6.0
+Provides: bundled(golang(github.com/golang/snappy)) = 0.0.4
+Provides: bundled(golang(github.com/google/go-cmp)) = 0.5.8
+Provides: bundled(golang(github.com/google/uuid)) = 1.3.0
+Provides: bundled(golang(github.com/google/wire)) = 0.5.0
+Provides: bundled(golang(github.com/gorilla/websocket)) = 1.4.2
 Provides: bundled(golang(github.com/gosimple/slug)) = 1.9.0
-Provides: bundled(golang(github.com/grafana/grafana-aws-sdk)) = 0.4.0
-Provides: bundled(golang(github.com/grafana/grafana-plugin-model)) = 0.0.0-20190930120109.1fc953a61fb4
-Provides: bundled(golang(github.com/grafana/grafana-plugin-sdk-go)) = 0.88.0
-Provides: bundled(golang(github.com/grafana/loki)) = 1.6.2-0.20201026154740.6978ee5d7387
-Provides: bundled(golang(github.com/grpc-ecosystem/go-grpc-middleware)) = 1.2.2
-Provides: bundled(golang(github.com/hashicorp/go-hclog)) = 0.15.0
-Provides: bundled(golang(github.com/hashicorp/go-plugin)) = 1.4.0
-Provides: bundled(golang(github.com/hashicorp/go-version)) = 1.2.1
-Provides: bundled(golang(github.com/inconshreveable/log15)) = 0.0.0-20180818164646.67afb5ed74ec
-Provides: bundled(golang(github.com/influxdata/influxdb-client-go/v2)) = 2.2.0
-Provides: bundled(golang(github.com/jaegertracing/jaeger)) = 1.22.1-0.20210304164023.2fff3ca58910
+Provides: bundled(golang(github.com/grafana/cuetsy)) = 0.0.1
+Provides: bundled(golang(github.com/grafana/grafana-aws-sdk)) = 0.10.7
+Provides: bundled(golang(github.com/grafana/grafana-azure-sdk-go)) = 1.3.0
+Provides: bundled(golang(github.com/grafana/grafana-plugin-sdk-go)) = 0.138.0
+Provides: bundled(golang(github.com/grafana/loki)) = 1.6.2-0.20211015002020.7832783b1caa
+Provides: bundled(golang(github.com/grpc-ecosystem/go-grpc-middleware)) = 1.3.0
+Provides: bundled(golang(github.com/hashicorp/go-hclog)) = 1.0.0
+Provides: bundled(golang(github.com/hashicorp/go-plugin)) = 1.4.3
+Provides: bundled(golang(github.com/hashicorp/go-version)) = 1.3.0
+Provides: bundled(golang(github.com/influxdata/influxdb-client-go/v2)) = 2.6.0
+Provides: bundled(golang(github.com/influxdata/line-protocol)) = 0.0.0-20210311194329.9aa0e372d097
 Provides: bundled(golang(github.com/jmespath/go-jmespath)) = 0.4.0
 Provides: bundled(golang(github.com/json-iterator/go)) = 1.1.12
-Provides: bundled(golang(github.com/lib/pq)) = 1.9.0
+Provides: bundled(golang(github.com/lib/pq)) = 1.10.4
 Provides: bundled(golang(github.com/linkedin/goavro/v2)) = 2.10.0
-Provides: bundled(golang(github.com/magefile/mage)) = 1.11.0
-Provides: bundled(golang(github.com/mattn/go-isatty)) = 0.0.12
-Provides: bundled(golang(github.com/mattn/go-sqlite3)) = 1.14.6
+Provides: bundled(golang(github.com/m3db/prometheus_remote_client_golang)) = 0.4.4
+Provides: bundled(golang(github.com/magefile/mage)) = 1.13.0
+Provides: bundled(golang(github.com/mattn/go-isatty)) = 0.0.14
+Provides: bundled(golang(github.com/mattn/go-sqlite3)) = 1.14.7
+Provides: bundled(golang(github.com/matttproud/golang_protobuf_extensions)) = 1.0.2-0.20181231171920.c182affec369
 Provides: bundled(golang(github.com/mwitkow/go-conntrack)) = 0.0.0-20190716064945.2f068394615f
+Provides: bundled(golang(github.com/ohler55/ojg)) = 1.12.9
 Provides: bundled(golang(github.com/opentracing/opentracing-go)) = 1.2.0
 Provides: bundled(golang(github.com/patrickmn/go-cache)) = 2.1.0+incompatible
 Provides: bundled(golang(github.com/pkg/errors)) = 0.9.1
-Provides: bundled(golang(github.com/prometheus/client_golang)) = 1.11.1
+Provides: bundled(golang(github.com/prometheus/alertmanager)) = 0.23.1-0.20211116083607.e2a10119aaf7
+Provides: bundled(golang(github.com/prometheus/client_golang)) = 1.12.1
 Provides: bundled(golang(github.com/prometheus/client_model)) = 0.2.0
-Provides: bundled(golang(github.com/prometheus/common)) = 0.26.0
-Provides: bundled(golang(github.com/robfig/cron)) = 0.0.0-20180505203441.b41be1df6967
+Provides: bundled(golang(github.com/prometheus/common)) = 0.32.1
+Provides: bundled(golang(github.com/prometheus/prometheus)) = 1.8.2-0.20211011171444.354d8d2ecfac
 Provides: bundled(golang(github.com/robfig/cron/v3)) = 3.0.1
-Provides: bundled(golang(github.com/russellhaering/goxmldsig)) = 1.1.0
-Provides: bundled(golang(github.com/smartystreets/goconvey)) = 1.6.4
-Provides: bundled(golang(github.com/stretchr/testify)) = 1.7.0
+Provides: bundled(golang(github.com/russellhaering/goxmldsig)) = 1.1.1
+Provides: bundled(golang(github.com/stretchr/testify)) = 1.7.2
 Provides: bundled(golang(github.com/teris-io/shortid)) = 0.0.0-20171029131806.771a37caa5cf
-Provides: bundled(golang(github.com/timberio/go-datemath)) = 0.1.1-0.20200323150745.74ddef604fff
-Provides: bundled(golang(github.com/ua-parser/uap-go)) = 0.0.0-20190826212731.daf92ba38329
-Provides: bundled(golang(github.com/uber/jaeger-client-go)) = 2.25.0+incompatible
+Provides: bundled(golang(github.com/ua-parser/uap-go)) = 0.0.0-20211112212520.00c877edfe0f
+Provides: bundled(golang(github.com/uber/jaeger-client-go)) = 2.29.1+incompatible
 Provides: bundled(golang(github.com/unknwon/com)) = 1.0.1
 Provides: bundled(golang(github.com/urfave/cli/v2)) = 2.3.0
-Provides: bundled(golang(github.com/weaveworks/common)) = 0.0.0-20201119133501.0619918236ec
+Provides: bundled(golang(github.com/vectordotdev/go-datemath)) = 0.1.1-0.20220323213446.f3954d0b18ae
 Provides: bundled(golang(github.com/xorcare/pointer)) = 1.1.0
 Provides: bundled(golang(github.com/yudai/gojsondiff)) = 1.0.0
-Provides: bundled(golang(go.opentelemetry.io/collector)) = 0.21.0
-Provides: bundled(golang(golang.org/x/crypto)) = 0.0.0-20201221181555.eec23a3978ad
-Provides: bundled(golang(golang.org/x/net)) = 0.0.0-20211015210444.4f30a5c0130f
-Provides: bundled(golang(golang.org/x/oauth2)) = 0.0.0-20210113205817.d3ed898aa8a3
+Provides: bundled(golang(go.opentelemetry.io/collector)) = 0.31.0
+Provides: bundled(golang(go.opentelemetry.io/collector/model)) = 0.31.0
+Provides: bundled(golang(go.opentelemetry.io/otel)) = 1.6.3
+Provides: bundled(golang(go.opentelemetry.io/otel/exporters/jaeger)) = 1.0.0
+Provides: bundled(golang(go.opentelemetry.io/otel/sdk)) = 1.6.3
+Provides: bundled(golang(go.opentelemetry.io/otel/trace)) = 1.6.3
+Provides: bundled(golang(golang.org/x/crypto)) = 0.0.0-20220331220935.ae2d96664a29
+Provides: bundled(golang(golang.org/x/exp)) = 0.0.0-20210220032938.85be41e4509f
+Provides: bundled(golang(golang.org/x/oauth2)) = 0.0.0-20220309155454.6242fa91716a
 Provides: bundled(golang(golang.org/x/sync)) = 0.0.0-20210220032951.036812b2e83c
-Provides: bundled(golang(golang.org/x/time)) = 0.0.0-20200630173020.3af7569d3a1e
+Provides: bundled(golang(golang.org/x/time)) = 0.0.0-20220224211638.0e9765cccd65
+Provides: bundled(golang(golang.org/x/tools)) = 0.1.10
 Provides: bundled(golang(gonum.org/v1/gonum)) = 0.11.0
-Provides: bundled(golang(google.golang.org/api)) = 0.40.0
-Provides: bundled(golang(google.golang.org/grpc)) = 1.36.0
-Provides: bundled(golang(gopkg.in/ini.v1)) = 1.62.0
-Provides: bundled(golang(gopkg.in/ldap.v3)) = 3.0.2
-Provides: bundled(golang(gopkg.in/macaron.v1)) = 1.4.0
+Provides: bundled(golang(google.golang.org/api)) = 0.74.0
+Provides: bundled(golang(google.golang.org/grpc)) = 1.45.0
+Provides: bundled(golang(google.golang.org/protobuf)) = 1.28.0
+Provides: bundled(golang(gopkg.in/ini.v1)) = 1.66.2
+Provides: bundled(golang(gopkg.in/ldap.v3)) = 3.1.0
 Provides: bundled(golang(gopkg.in/mail.v2)) = 2.3.1
-Provides: bundled(golang(gopkg.in/redis.v5)) = 5.2.9
 Provides: bundled(golang(gopkg.in/square/go-jose.v2)) = 2.5.1
 Provides: bundled(golang(gopkg.in/yaml.v2)) = 2.4.0
+Provides: bundled(golang(gopkg.in/yaml.v3)) = 3.0.1
+Provides: bundled(golang(xorm.io/builder)) = 0.3.6
 Provides: bundled(golang(xorm.io/core)) = 0.7.3
 Provides: bundled(golang(xorm.io/xorm)) = 0.8.2
-Provides: bundled(npm(@babel/core)) = 7.6.4
-Provides: bundled(npm(@babel/core)) = 7.6.4
-Provides: bundled(npm(@babel/plugin-proposal-nullish-coalescing-operator)) = 7.8.3
-Provides: bundled(npm(@babel/plugin-proposal-optional-chaining)) = 7.8.3
-Provides: bundled(npm(@babel/plugin-syntax-dynamic-import)) = 7.7.4
-Provides: bundled(npm(@babel/preset-env)) = 7.7.4
-Provides: bundled(npm(@babel/preset-env)) = 7.7.4
-Provides: bundled(npm(@babel/preset-react)) = 7.8.3
-Provides: bundled(npm(@babel/preset-typescript)) = 7.8.3
+Provides: bundled(golang(github.com/andybalholm/brotli)) = 1.0.3
+Provides: bundled(golang(github.com/go-kit/log)) = 0.1.0
+Provides: bundled(golang(github.com/go-openapi/loads)) = 0.20.2
+Provides: bundled(golang(github.com/go-openapi/spec)) = 0.20.4
+Provides: bundled(golang(github.com/googleapis/gax-go/v2)) = 2.2.0
+Provides: bundled(golang(github.com/grafana/grafana-google-sdk-go)) = 0.0.0-20211104130251.b190293eaf58
+Provides: bundled(golang(github.com/hashicorp/golang-lru)) = 0.5.4
+Provides: bundled(golang(github.com/segmentio/encoding)) = 0.3.2
+Provides: bundled(golang(go.uber.org/atomic)) = 1.9.0
+Provides: bundled(golang(golang.org/x/text)) = 0.3.7
+Provides: bundled(golang(google.golang.org/genproto)) = 0.0.0-20220421151946.72621c1f0bd3
+Provides: bundled(golang(cloud.google.com/go/kms)) = 1.4.0
+Provides: bundled(golang(github.com/Azure/azure-sdk-for-go/sdk/azidentity)) = 0.13.2
+Provides: bundled(golang(github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys)) = 0.4.0
+Provides: bundled(golang(github.com/Azure/go-autorest/autorest/adal)) = 0.9.17
+Provides: bundled(golang(github.com/armon/go-radix)) = 1.0.0
+Provides: bundled(golang(github.com/blugelabs/bluge)) = 0.1.9
+Provides: bundled(golang(github.com/golang-migrate/migrate/v4)) = 4.7.0
+Provides: bundled(golang(github.com/grafana/dskit)) = 0.0.0-20211011144203.3a88ec0b675f
+Provides: bundled(golang(github.com/grafana/thema)) = 0.0.0-20220523183731.72aebd14e751
+Provides: bundled(golang(github.com/laher/mergefs)) = 0.1.1
+Provides: bundled(golang(go.etcd.io/etcd/api/v3)) = 3.5.4
+Provides: bundled(golang(go.opentelemetry.io/contrib/propagators/jaeger)) = 1.6.0
+Provides: bundled(golang(go.opentelemetry.io/otel/exporters/otlp/otlptrace)) = 1.6.3
+Provides: bundled(golang(go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc)) = 1.6.3
+Provides: bundled(golang(gocloud.dev)) = 0.25.0
+Provides: bundled(npm(@babel/core)) = 7.12.9
+Provides: bundled(npm(@babel/plugin-proposal-class-properties)) = 7.16.7
+Provides: bundled(npm(@babel/plugin-proposal-nullish-coalescing-operator)) = 7.16.7
+Provides: bundled(npm(@babel/plugin-proposal-object-rest-spread)) = 7.12.1
+Provides: bundled(npm(@babel/plugin-proposal-optional-chaining)) = 7.16.7
+Provides: bundled(npm(@babel/plugin-syntax-dynamic-import)) = 7.8.3
+Provides: bundled(npm(@babel/plugin-transform-react-constant-elements)) = 7.17.6
+Provides: bundled(npm(@babel/plugin-transform-runtime)) = 7.17.0
+Provides: bundled(npm(@babel/plugin-transform-typescript)) = 7.16.7
+Provides: bundled(npm(@babel/preset-env)) = 7.16.11
+Provides: bundled(npm(@babel/preset-react)) = 7.16.7
+Provides: bundled(npm(@babel/preset-typescript)) = 7.16.7
+Provides: bundled(npm(@betterer/betterer)) = 5.3.5
+Provides: bundled(npm(@betterer/cli)) = 5.3.5
+Provides: bundled(npm(@betterer/eslint)) = 5.3.5
+Provides: bundled(npm(@betterer/regexp)) = 5.3.5
 Provides: bundled(npm(@braintree/sanitize-url)) = 6.0.0
-Provides: bundled(npm(@cypress/webpack-preprocessor)) = 4.1.3
-Provides: bundled(npm(@emotion/core)) = 10.0.21
-Provides: bundled(npm(@emotion/core)) = 10.0.21
+Provides: bundled(npm(@cypress/webpack-preprocessor)) = 5.11.1
+Provides: bundled(npm(@emotion/css)) = 10.0.27
+Provides: bundled(npm(@emotion/eslint-plugin)) = 11.7.0
+Provides: bundled(npm(@emotion/react)) = 11.9.0
 Provides: bundled(npm(@grafana/api-documenter)) = 7.11.2
-Provides: bundled(npm(@grafana/api-extractor)) = 7.10.1
-Provides: bundled(npm(@grafana/aws-sdk)) = 0.0.3
-Provides: bundled(npm(@grafana/aws-sdk)) = 0.0.3
-Provides: bundled(npm(@grafana/eslint-config)) = 2.3.0
-Provides: bundled(npm(@grafana/eslint-config)) = 2.3.0
-Provides: bundled(npm(@grafana/slate-react)) = 0.22.9-grafana
-Provides: bundled(npm(@grafana/slate-react)) = 0.22.9-grafana
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@grafana/tsconfig)) = 1.0.0rc1
-Provides: bundled(npm(@iconscout/react-unicons)) = 1.1.4
-Provides: bundled(npm(@mochajs/json-file-reporter)) = 1.2.0
-Provides: bundled(npm(@popperjs/core)) = 2.5.4
-Provides: bundled(npm(@popperjs/core)) = 2.5.4
-Provides: bundled(npm(@reduxjs/toolkit)) = 1.5.0
-Provides: bundled(npm(@rollup/plugin-commonjs)) = 16.0.0
-Provides: bundled(npm(@rollup/plugin-commonjs)) = 16.0.0
-Provides: bundled(npm(@rollup/plugin-commonjs)) = 16.0.0
-Provides: bundled(npm(@rollup/plugin-commonjs)) = 16.0.0
-Provides: bundled(npm(@rollup/plugin-commonjs)) = 16.0.0
-Provides: bundled(npm(@rollup/plugin-image)) = 2.0.5
+Provides: bundled(npm(@grafana/aws-sdk)) = 0.0.36
+Provides: bundled(npm(@grafana/data)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/e2e)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/e2e-selectors)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/eslint-config)) = 4.0.0
+Provides: bundled(npm(@grafana/experimental)) = 0.0.2-canary.30
+Provides: bundled(npm(@grafana/google-sdk)) = 0.0.3
+Provides: bundled(npm(@grafana/lezer-logql)) = 0.0.12
+Provides: bundled(npm(@grafana/runtime)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/schema)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/toolkit)) = 0.0.0-use.local
+Provides: bundled(npm(@grafana/tsconfig)) = 1.2.0rc1
+Provides: bundled(npm(@grafana/ui)) = 0.0.0-use.local
+Provides: bundled(npm(@jaegertracing/jaeger-ui-components)) = 0.0.0-use.local
+Provides: bundled(npm(@jest/core)) = 27.5.1
+Provides: bundled(npm(@kusto/monaco-kusto)) = 5.1.3
+Provides: bundled(npm(@lezer/common)) = 0.15.12
+Provides: bundled(npm(@lezer/lr)) = 0.15.8
+Provides: bundled(npm(@lingui/cli)) = 3.13.3
+Provides: bundled(npm(@lingui/core)) = 3.13.3
+Provides: bundled(npm(@lingui/macro)) = 3.12.1
+Provides: bundled(npm(@lingui/react)) = 3.13.3
+Provides: bundled(npm(@mdx-js/react)) = 1.6.22
+Provides: bundled(npm(@microsoft/api-extractor)) = 7.24.1
+Provides: bundled(npm(@mochajs/json-file-reporter)) = 1.3.0
+Provides: bundled(npm(@monaco-editor/react)) = 4.3.1
+Provides: bundled(npm(@opentelemetry/api)) = 1.1.0
+Provides: bundled(npm(@opentelemetry/exporter-collector)) = 0.25.0
+Provides: bundled(npm(@opentelemetry/semantic-conventions)) = 0.25.0
+Provides: bundled(npm(@pmmmwh/react-refresh-webpack-plugin)) = 0.5.4
+Provides: bundled(npm(@popperjs/core)) = 2.11.2
+Provides: bundled(npm(@react-aria/button)) = 3.4.4
+Provides: bundled(npm(@react-aria/dialog)) = 3.1.9
+Provides: bundled(npm(@react-aria/focus)) = 3.5.5
+Provides: bundled(npm(@react-aria/interactions)) = 3.8.4
+Provides: bundled(npm(@react-aria/menu)) = 3.4.4
+Provides: bundled(npm(@react-aria/overlays)) = 3.8.2
+Provides: bundled(npm(@react-aria/utils)) = 3.12.0
+Provides: bundled(npm(@react-stately/collections)) = 3.3.8
+Provides: bundled(npm(@react-stately/menu)) = 3.2.7
+Provides: bundled(npm(@react-stately/tree)) = 3.2.4
+Provides: bundled(npm(@react-types/button)) = 3.4.5
+Provides: bundled(npm(@react-types/menu)) = 3.5.3
+Provides: bundled(npm(@react-types/overlays)) = 3.5.5
+Provides: bundled(npm(@react-types/shared)) = 3.12.0
+Provides: bundled(npm(@reduxjs/toolkit)) = 1.8.1
+Provides: bundled(npm(@rollup/plugin-alias)) = 3.1.9
+Provides: bundled(npm(@rollup/plugin-commonjs)) = 22.0.0
 Provides: bundled(npm(@rollup/plugin-json)) = 4.1.0
-Provides: bundled(npm(@rollup/plugin-node-resolve)) = 10.0.0
-Provides: bundled(npm(@rollup/plugin-node-resolve)) = 10.0.0
-Provides: bundled(npm(@rollup/plugin-node-resolve)) = 10.0.0
-Provides: bundled(npm(@rollup/plugin-node-resolve)) = 10.0.0
-Provides: bundled(npm(@rollup/plugin-node-resolve)) = 10.0.0
+Provides: bundled(npm(@rollup/plugin-node-resolve)) = 13.3.0
 Provides: bundled(npm(@rtsao/plugin-proposal-class-properties)) = 7.0.1-patch.1
-Provides: bundled(npm(@sentry/browser)) = 5.25.0
-Provides: bundled(npm(@sentry/browser)) = 5.25.0
-Provides: bundled(npm(@sentry/types)) = 5.24.2
-Provides: bundled(npm(@sentry/utils)) = 5.24.2
-Provides: bundled(npm(@storybook/addon-controls)) = 6.1.15
-Provides: bundled(npm(@storybook/addon-essentials)) = 6.1.15
-Provides: bundled(npm(@storybook/addon-knobs)) = 6.1.15
-Provides: bundled(npm(@storybook/addon-storysource)) = 6.1.15
-Provides: bundled(npm(@storybook/react)) = 6.1.15
-Provides: bundled(npm(@storybook/theming)) = 6.1.15
-Provides: bundled(npm(@testing-library/jest-dom)) = 5.11.5
-Provides: bundled(npm(@testing-library/jest-dom)) = 5.11.5
-Provides: bundled(npm(@testing-library/react)) = 11.1.2
-Provides: bundled(npm(@testing-library/react-hooks)) = 3.2.1
-Provides: bundled(npm(@testing-library/user-event)) = 12.1.3
-Provides: bundled(npm(@torkelo/react-select)) = 3.0.8
-Provides: bundled(npm(@torkelo/react-select)) = 3.0.8
-Provides: bundled(npm(@types/angular)) = 1.6.56
-Provides: bundled(npm(@types/angular-route)) = 1.7.0
-Provides: bundled(npm(@types/antlr4)) = 4.7.1
-Provides: bundled(npm(@types/classnames)) = 2.2.7
-Provides: bundled(npm(@types/classnames)) = 2.2.7
-Provides: bundled(npm(@types/classnames)) = 2.2.7
-Provides: bundled(npm(@types/clipboard)) = 2.0.1
+Provides: bundled(npm(@sentry/browser)) = 6.19.7
+Provides: bundled(npm(@sentry/types)) = 6.19.7
+Provides: bundled(npm(@sentry/utils)) = 6.19.7
+Provides: bundled(npm(@storybook/addon-a11y)) = 6.4.21
+Provides: bundled(npm(@storybook/addon-actions)) = 6.4.21
+Provides: bundled(npm(@storybook/addon-docs)) = 6.4.21
+Provides: bundled(npm(@storybook/addon-essentials)) = 6.4.21
+Provides: bundled(npm(@storybook/addon-knobs)) = 6.4.0
+Provides: bundled(npm(@storybook/addon-storysource)) = 6.4.21
+Provides: bundled(npm(@storybook/addons)) = 6.4.21
+Provides: bundled(npm(@storybook/api)) = 6.4.21
+Provides: bundled(npm(@storybook/builder-webpack5)) = 6.4.21
+Provides: bundled(npm(@storybook/components)) = 6.4.21
+Provides: bundled(npm(@storybook/core-events)) = 6.4.21
+Provides: bundled(npm(@storybook/manager-webpack5)) = 6.4.21
+Provides: bundled(npm(@storybook/react)) = 6.4.21
+Provides: bundled(npm(@storybook/theming)) = 6.4.21
+Provides: bundled(npm(@swc/core)) = 1.2.187
+Provides: bundled(npm(@swc/helpers)) = 0.3.13
+Provides: bundled(npm(@testing-library/dom)) = 8.13.0
+Provides: bundled(npm(@testing-library/jest-dom)) = 5.16.4
+Provides: bundled(npm(@testing-library/react)) = 12.1.4
+Provides: bundled(npm(@testing-library/react-hooks)) = 8.0.0
+Provides: bundled(npm(@testing-library/user-event)) = 14.2.0
+Provides: bundled(npm(@types/angular)) = 1.8.3
+Provides: bundled(npm(@types/angular-route)) = 1.7.2
+Provides: bundled(npm(@types/chrome-remote-interface)) = 0.31.4
+Provides: bundled(npm(@types/classnames)) = 2.3.0
 Provides: bundled(npm(@types/command-exists)) = 1.2.0
-Provides: bundled(npm(@types/common-tags)) = 1.8.0
-Provides: bundled(npm(@types/common-tags)) = 1.8.0
-Provides: bundled(npm(@types/d3)) = 5.7.2
-Provides: bundled(npm(@types/d3)) = 5.7.2
-Provides: bundled(npm(@types/d3-force)) = 1.2.1
-Provides: bundled(npm(@types/d3-interpolate)) = 1.3.1
+Provides: bundled(npm(@types/common-tags)) = 1.8.1
+Provides: bundled(npm(@types/d3)) = 7.1.0
+Provides: bundled(npm(@types/d3-force)) = 2.1.4
+Provides: bundled(npm(@types/d3-interpolate)) = 1.4.2
 Provides: bundled(npm(@types/d3-scale-chromatic)) = 1.3.1
-Provides: bundled(npm(@types/debounce-promise)) = 3.1.3
+Provides: bundled(npm(@types/debounce-promise)) = 3.1.4
 Provides: bundled(npm(@types/deep-freeze)) = 0.1.2
-Provides: bundled(npm(@types/enzyme)) = 3.10.3
+Provides: bundled(npm(@types/enzyme)) = 3.10.10
 Provides: bundled(npm(@types/enzyme-adapter-react-16)) = 1.0.6
-Provides: bundled(npm(@types/expect-puppeteer)) = 3.3.1
-Provides: bundled(npm(@types/file-saver)) = 2.0.1
-Provides: bundled(npm(@types/fs-extra)) = 8.1.0
-Provides: bundled(npm(@types/hoist-non-react-statics)) = 3.3.1
-Provides: bundled(npm(@types/hoist-non-react-statics)) = 3.3.1
+Provides: bundled(npm(@types/eslint)) = 7.28.2
+Provides: bundled(npm(@types/file-saver)) = 2.0.5
+Provides: bundled(npm(@types/fs-extra)) = 8.1.2
+Provides: bundled(npm(@types/google.analytics)) = 0.0.42
+Provides: bundled(npm(@types/history)) = 4.7.9
 Provides: bundled(npm(@types/hoist-non-react-statics)) = 3.3.1
-Provides: bundled(npm(@types/inquirer)) = 6.5.0
-Provides: bundled(npm(@types/is-hotkey)) = 0.1.1
-Provides: bundled(npm(@types/jest)) = 26.0.12
-Provides: bundled(npm(@types/jest)) = 26.0.12
-Provides: bundled(npm(@types/jest)) = 26.0.12
-Provides: bundled(npm(@types/jest)) = 26.0.12
-Provides: bundled(npm(@types/jest)) = 26.0.12
-Provides: bundled(npm(@types/jquery)) = 3.3.38
-Provides: bundled(npm(@types/jquery)) = 3.3.38
-Provides: bundled(npm(@types/jquery)) = 3.3.38
-Provides: bundled(npm(@types/jsurl)) = 1.2.28
-Provides: bundled(npm(@types/lodash)) = 4.14.123
-Provides: bundled(npm(@types/lodash)) = 4.14.123
-Provides: bundled(npm(@types/lodash)) = 4.14.123
-Provides: bundled(npm(@types/lodash)) = 4.14.123
-Provides: bundled(npm(@types/lru-cache)) = 5.1.0
-Provides: bundled(npm(@types/marked)) = 1.1.0
-Provides: bundled(npm(@types/md5)) = 2.1.33
-Provides: bundled(npm(@types/mock-raf)) = 1.0.2
-Provides: bundled(npm(@types/moment)) = 2.13.0
-Provides: bundled(npm(@types/moment-timezone)) = 0.5.13
-Provides: bundled(npm(@types/mousetrap)) = 1.6.3
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/node)) = 10.14.1
-Provides: bundled(npm(@types/papaparse)) = 5.2.0
-Provides: bundled(npm(@types/papaparse)) = 5.2.0
-Provides: bundled(npm(@types/papaparse)) = 5.2.0
-Provides: bundled(npm(@types/prettier)) = 1.18.3
-Provides: bundled(npm(@types/prismjs)) = 1.16.0
-Provides: bundled(npm(@types/puppeteer-core)) = 1.9.0
-Provides: bundled(npm(@types/react)) = 16.9.9
-Provides: bundled(npm(@types/react)) = 16.9.9
-Provides: bundled(npm(@types/react)) = 16.9.9
-Provides: bundled(npm(@types/react-beautiful-dnd)) = 12.1.2
-Provides: bundled(npm(@types/react-beautiful-dnd)) = 12.1.2
-Provides: bundled(npm(@types/react-color)) = 3.0.1
-Provides: bundled(npm(@types/react-custom-scrollbars)) = 4.0.5
-Provides: bundled(npm(@types/react-dev-utils)) = 9.0.4
-Provides: bundled(npm(@types/react-dom)) = 16.9.2
-Provides: bundled(npm(@types/react-grid-layout)) = 1.1.1
+Provides: bundled(npm(@types/inquirer)) = 8.2.1
+Provides: bundled(npm(@types/is-hotkey)) = 0.1.7
+Provides: bundled(npm(@types/jest)) = 26.0.15
+Provides: bundled(npm(@types/jquery)) = 3.5.14
+Provides: bundled(npm(@types/js-yaml)) = 4.0.5
+Provides: bundled(npm(@types/jsurl)) = 1.2.30
+Provides: bundled(npm(@types/lingui__macro)) = 3.0.0
+Provides: bundled(npm(@types/lodash)) = 4.14.149
+Provides: bundled(npm(@types/logfmt)) = 1.2.2
+Provides: bundled(npm(@types/marked)) = 4.0.3
+Provides: bundled(npm(@types/mock-raf)) = 1.0.3
+Provides: bundled(npm(@types/mousetrap)) = 1.6.9
+Provides: bundled(npm(@types/node)) = 12.20.24
+Provides: bundled(npm(@types/papaparse)) = 5.3.2
+Provides: bundled(npm(@types/pluralize)) = 0.0.29
+Provides: bundled(npm(@types/prettier)) = 2.4.2
+Provides: bundled(npm(@types/prismjs)) = 1.26.0
+Provides: bundled(npm(@types/prop-types)) = 15.7.4
+Provides: bundled(npm(@types/rc-time-picker)) = 3.4.1
+Provides: bundled(npm(@types/react)) = 17.0.30
+Provides: bundled(npm(@types/react-beautiful-dnd)) = 13.1.2
+Provides: bundled(npm(@types/react-calendar)) = 3.5.1
+Provides: bundled(npm(@types/react-color)) = 3.0.6
+Provides: bundled(npm(@types/react-dev-utils)) = 9.0.10
+Provides: bundled(npm(@types/react-dom)) = 17.0.10
+Provides: bundled(npm(@types/react-grid-layout)) = 1.3.2
+Provides: bundled(npm(@types/react-highlight-words)) = 0.16.4
 Provides: bundled(npm(@types/react-icons)) = 2.2.7
-Provides: bundled(npm(@types/react-loadable)) = 5.5.2
-Provides: bundled(npm(@types/react-redux)) = 7.1.7
-Provides: bundled(npm(@types/react-select)) = 3.0.8
-Provides: bundled(npm(@types/react-select)) = 3.0.8
-Provides: bundled(npm(@types/react-table)) = 7.0.12
-Provides: bundled(npm(@types/react-test-renderer)) = 16.9.1
-Provides: bundled(npm(@types/react-test-renderer)) = 16.9.1
-Provides: bundled(npm(@types/react-transition-group)) = 4.2.3
-Provides: bundled(npm(@types/react-transition-group)) = 4.2.3
-Provides: bundled(npm(@types/react-virtualized-auto-sizer)) = 1.0.0
-Provides: bundled(npm(@types/react-window)) = 1.8.1
-Provides: bundled(npm(@types/recompose)) = 0.30.7
-Provides: bundled(npm(@types/redux-logger)) = 3.0.7
-Provides: bundled(npm(@types/redux-mock-store)) = 1.0.2
+Provides: bundled(npm(@types/react-loadable)) = 5.5.6
+Provides: bundled(npm(@types/react-redux)) = 7.1.20
+Provides: bundled(npm(@types/react-resizable)) = 3.0.0
+Provides: bundled(npm(@types/react-router-dom)) = 5.3.3
+Provides: bundled(npm(@types/react-table)) = 7.7.12
+Provides: bundled(npm(@types/react-test-renderer)) = 17.0.1
+Provides: bundled(npm(@types/react-transition-group)) = 4.4.4
+Provides: bundled(npm(@types/react-virtualized-auto-sizer)) = 1.0.1
+Provides: bundled(npm(@types/react-window)) = 1.8.5
+Provides: bundled(npm(@types/react-window-infinite-loader)) = 1.0.6
+Provides: bundled(npm(@types/redux-mock-store)) = 1.0.3
 Provides: bundled(npm(@types/reselect)) = 2.2.0
-Provides: bundled(npm(@types/rimraf)) = 2.0.3
-Provides: bundled(npm(@types/rollup-plugin-visualizer)) = 2.6.0
-Provides: bundled(npm(@types/rollup-plugin-visualizer)) = 2.6.0
-Provides: bundled(npm(@types/rollup-plugin-visualizer)) = 2.6.0
-Provides: bundled(npm(@types/rollup-plugin-visualizer)) = 2.6.0
-Provides: bundled(npm(@types/rollup-plugin-visualizer)) = 2.6.0
-Provides: bundled(npm(@types/semver)) = 6.0.2
-Provides: bundled(npm(@types/sinon)) = 7.5.2
-Provides: bundled(npm(@types/slate)) = 0.47.1
-Provides: bundled(npm(@types/slate)) = 0.47.1
-Provides: bundled(npm(@types/slate-plain-serializer)) = 0.6.1
-Provides: bundled(npm(@types/slate-react)) = 0.22.5
-Provides: bundled(npm(@types/slate-react)) = 0.22.5
-Provides: bundled(npm(@types/slate-react)) = 0.22.5
-Provides: bundled(npm(@types/systemjs)) = 0.20.6
-Provides: bundled(npm(@types/systemjs)) = 0.20.6
-Provides: bundled(npm(@types/testing-library__jest-dom)) = 5.9.5
-Provides: bundled(npm(@types/testing-library__react-hooks)) = 3.1.0
-Provides: bundled(npm(@types/tinycolor2)) = 1.4.1
-Provides: bundled(npm(@types/tinycolor2)) = 1.4.1
-Provides: bundled(npm(@types/tmp)) = 0.1.0
-Provides: bundled(npm(@types/uuid)) = 8.3.0
-Provides: bundled(npm(@types/webpack)) = 4.39.3
-Provides: bundled(npm(@typescript-eslint/eslint-plugin)) = 4.15.0
-Provides: bundled(npm(@typescript-eslint/eslint-plugin)) = 4.15.0
-Provides: bundled(npm(@typescript-eslint/parser)) = 4.15.0
-Provides: bundled(npm(@typescript-eslint/parser)) = 4.15.0
-Provides: bundled(npm(@visx/event)) = 1.3.0
-Provides: bundled(npm(@visx/gradient)) = 1.0.0
-Provides: bundled(npm(@visx/scale)) = 1.4.0
-Provides: bundled(npm(@visx/shape)) = 1.4.0
-Provides: bundled(npm(@visx/tooltip)) = 1.3.0
-Provides: bundled(npm(@welldone-software/why-did-you-render)) = 4.0.6
-Provides: bundled(npm(@wojtekmaj/enzyme-adapter-react-17)) = 0.3.1
-Provides: bundled(npm(abortcontroller-polyfill)) = 1.4.0
-Provides: bundled(npm(angular)) = 1.8.2
+Provides: bundled(npm(@types/rimraf)) = 3.0.2
+Provides: bundled(npm(@types/semver)) = 7.3.9
+Provides: bundled(npm(@types/sinon)) = 10.0.11
+Provides: bundled(npm(@types/slate)) = 0.47.9
+Provides: bundled(npm(@types/slate-plain-serializer)) = 0.7.2
+Provides: bundled(npm(@types/slate-react)) = 0.22.9
+Provides: bundled(npm(@types/systemjs)) = 0.20.8
+Provides: bundled(npm(@types/testing-library__jest-dom)) = 5.14.1
+Provides: bundled(npm(@types/testing-library__react-hooks)) = 3.4.1
+Provides: bundled(npm(@types/tinycolor2)) = 1.4.3
+Provides: bundled(npm(@types/tmp)) = 0.2.3
+Provides: bundled(npm(@types/uuid)) = 8.3.3
+Provides: bundled(npm(@typescript-eslint/eslint-plugin)) = 5.16.0
+Provides: bundled(npm(@typescript-eslint/parser)) = 5.16.0
+Provides: bundled(npm(@visx/event)) = 2.6.0
+Provides: bundled(npm(@visx/gradient)) = 2.10.0
+Provides: bundled(npm(@visx/group)) = 2.10.0
+Provides: bundled(npm(@visx/scale)) = 2.2.2
+Provides: bundled(npm(@visx/shape)) = 2.10.0
+Provides: bundled(npm(@visx/tooltip)) = 2.10.0
+Provides: bundled(npm(@welldone-software/why-did-you-render)) = 7.0.1
+Provides: bundled(npm(@wojtekmaj/enzyme-adapter-react-17)) = 0.6.7
+Provides: bundled(npm(angular)) = 1.8.3
 Provides: bundled(npm(angular-bindonce)) = 0.3.1
-Provides: bundled(npm(angular-mocks)) = 1.6.6
-Provides: bundled(npm(angular-route)) = 1.8.2
-Provides: bundled(npm(angular-sanitize)) = 1.8.2
-Provides: bundled(npm(antlr4)) = 4.8.0
-Provides: bundled(npm(apache-arrow)) = 0.16.0
-Provides: bundled(npm(autoprefixer)) = 9.7.4
-Provides: bundled(npm(axios)) = 0.21.1
-Provides: bundled(npm(axios)) = 0.21.1
-Provides: bundled(npm(babel-core)) = 7.0.0-bridge.0
-Provides: bundled(npm(babel-jest)) = 26.6.3
-Provides: bundled(npm(babel-jest)) = 26.6.3
-Provides: bundled(npm(babel-loader)) = 8.0.6
-Provides: bundled(npm(babel-loader)) = 8.0.6
-Provides: bundled(npm(babel-plugin-angularjs-annotate)) = 0.10.0
+Provides: bundled(npm(angular-route)) = 1.8.3
+Provides: bundled(npm(angular-sanitize)) = 1.8.3
+Provides: bundled(npm(ansicolor)) = 1.1.100
+Provides: bundled(npm(app)) = 0.0.0-use.local
+Provides: bundled(npm(autoprefixer)) = 9.8.8
+Provides: bundled(npm(axios)) = 0.25.0
+Provides: bundled(npm(babel-jest)) = 27.5.1
+Provides: bundled(npm(babel-loader)) = 8.2.3
 Provides: bundled(npm(babel-plugin-angularjs-annotate)) = 0.10.0
+Provides: bundled(npm(babel-plugin-macros)) = 2.8.0
 Provides: bundled(npm(baron)) = 3.0.3
 Provides: bundled(npm(blink-diff)) = 1.0.13
 Provides: bundled(npm(brace)) = 0.11.1
 Provides: bundled(npm(calculate-size)) = 1.1.1
-Provides: bundled(npm(centrifuge)) = 2.6.4
-Provides: bundled(npm(chalk)) = 1.1.3
-Provides: bundled(npm(chance)) = 1.1.4
-Provides: bundled(npm(classnames)) = 2.2.6
-Provides: bundled(npm(classnames)) = 2.2.6
-Provides: bundled(npm(classnames)) = 2.2.6
-Provides: bundled(npm(clean-webpack-plugin)) = 3.0.0
-Provides: bundled(npm(clipboard)) = 2.0.4
+Provides: bundled(npm(centrifuge)) = 2.8.5
+Provides: bundled(npm(chalk)) = 2.4.2
+Provides: bundled(npm(chance)) = 1.1.8
+Provides: bundled(npm(chrome-remote-interface)) = 0.31.2
+Provides: bundled(npm(classnames)) = 2.3.1
 Provides: bundled(npm(combokeys)) = 3.0.1
-Provides: bundled(npm(command-exists)) = 1.2.8
-Provides: bundled(npm(commander)) = 2.17.1
-Provides: bundled(npm(commander)) = 2.17.1
-Provides: bundled(npm(commander)) = 2.17.1
-Provides: bundled(npm(common-tags)) = 1.8.0
+Provides: bundled(npm(comlink)) = 4.3.1
+Provides: bundled(npm(command-exists)) = 1.2.9
+Provides: bundled(npm(commander)) = 2.11.0
 Provides: bundled(npm(common-tags)) = 1.8.0
-Provides: bundled(npm(concurrently)) = 4.1.0
 Provides: bundled(npm(copy-to-clipboard)) = 3.3.1
-Provides: bundled(npm(copy-webpack-plugin)) = 5.1.2
-Provides: bundled(npm(core-js)) = 1.2.7
-Provides: bundled(npm(css-loader)) = 3.4.2
-Provides: bundled(npm(css-loader)) = 3.4.2
-Provides: bundled(npm(cypress)) = 6.3.0
-Provides: bundled(npm(cypress-file-upload)) = 4.0.7
-Provides: bundled(npm(d3)) = 5.15.0
+Provides: bundled(npm(copy-webpack-plugin)) = 9.0.1
+Provides: bundled(npm(core-js)) = 2.6.12
+Provides: bundled(npm(css-loader)) = 3.6.0
+Provides: bundled(npm(css-minimizer-webpack-plugin)) = 3.4.1
+Provides: bundled(npm(csstype)) = 2.6.18
+Provides: bundled(npm(cypress)) = 9.5.1
+Provides: bundled(npm(cypress-file-upload)) = 5.0.8
 Provides: bundled(npm(d3)) = 5.15.0
 Provides: bundled(npm(d3-force)) = 1.2.1
+Provides: bundled(npm(d3-interpolate)) = 1.4.0
 Provides: bundled(npm(d3-scale-chromatic)) = 1.5.0
-Provides: bundled(npm(dangerously-set-html-content)) = 1.0.6
+Provides: bundled(npm(dangerously-set-html-content)) = 1.0.9
+Provides: bundled(npm(date-fns)) = 2.25.0
 Provides: bundled(npm(debounce-promise)) = 3.1.2
 Provides: bundled(npm(deep-freeze)) = 0.0.1
+Provides: bundled(npm(devtools-protocol)) = 0.0.927104
 Provides: bundled(npm(emotion)) = 10.0.27
-Provides: bundled(npm(emotion)) = 10.0.27
-Provides: bundled(npm(emotion)) = 10.0.27
-Provides: bundled(npm(enzyme)) = 3.11.0
 Provides: bundled(npm(enzyme)) = 3.11.0
-Provides: bundled(npm(enzyme-adapter-react-16)) = 1.15.2
-Provides: bundled(npm(enzyme-to-json)) = 3.4.4
-Provides: bundled(npm(es-abstract)) = 1.18.0-next.1
-Provides: bundled(npm(es6-promise)) = 4.2.8
-Provides: bundled(npm(es6-shim)) = 0.35.5
-Provides: bundled(npm(eslint)) = 2.13.1
-Provides: bundled(npm(eslint)) = 2.13.1
-Provides: bundled(npm(eslint-config-prettier)) = 7.2.0
-Provides: bundled(npm(eslint-config-prettier)) = 7.2.0
-Provides: bundled(npm(eslint-plugin-jsdoc)) = 31.6.1
-Provides: bundled(npm(eslint-plugin-jsdoc)) = 31.6.1
-Provides: bundled(npm(eslint-plugin-no-only-tests)) = 2.4.0
-Provides: bundled(npm(eslint-plugin-prettier)) = 3.3.1
-Provides: bundled(npm(eslint-plugin-prettier)) = 3.3.1
-Provides: bundled(npm(eslint-plugin-react)) = 7.22.0
-Provides: bundled(npm(eslint-plugin-react-hooks)) = 4.2.0
-Provides: bundled(npm(eslint-plugin-react-hooks)) = 4.2.0
-Provides: bundled(npm(eventemitter3)) = 3.1.2
-Provides: bundled(npm(eventemitter3)) = 3.1.2
-Provides: bundled(npm(execa)) = 0.7.0
-Provides: bundled(npm(execa)) = 0.7.0
-Provides: bundled(npm(execa)) = 0.7.0
-Provides: bundled(npm(expect-puppeteer)) = 4.1.1
-Provides: bundled(npm(expect.js)) = 0.3.1
-Provides: bundled(npm(expose-loader)) = 0.7.5
-Provides: bundled(npm(fast-text-encoding)) = 1.0.0
-Provides: bundled(npm(file-loader)) = 5.0.2
-Provides: bundled(npm(file-loader)) = 5.0.2
-Provides: bundled(npm(file-saver)) = 2.0.2
-Provides: bundled(npm(fork-ts-checker-webpack-plugin)) = 1.0.0
-Provides: bundled(npm(fork-ts-checker-webpack-plugin)) = 1.0.0
+Provides: bundled(npm(enzyme-to-json)) = 3.6.2
+Provides: bundled(npm(eslint)) = 8.11.0
+Provides: bundled(npm(eslint-config-prettier)) = 8.5.0
+Provides: bundled(npm(eslint-plugin-import)) = 2.26.0
+Provides: bundled(npm(eslint-plugin-jest)) = 26.2.2
+Provides: bundled(npm(eslint-plugin-jsdoc)) = 38.0.6
+Provides: bundled(npm(eslint-plugin-lodash)) = 7.4.0
+Provides: bundled(npm(eslint-plugin-react)) = 7.29.4
+Provides: bundled(npm(eslint-plugin-react-hooks)) = 4.3.0
+Provides: bundled(npm(eslint-webpack-plugin)) = 3.1.1
+Provides: bundled(npm(eventemitter3)) = 4.0.7
+Provides: bundled(npm(execa)) = 1.0.0
+Provides: bundled(npm(expose-loader)) = 4.0.0
+Provides: bundled(npm(fast-deep-equal)) = 3.1.3
+Provides: bundled(npm(fast-json-patch)) = 3.1.1
+Provides: bundled(npm(file-loader)) = 6.2.0
+Provides: bundled(npm(file-saver)) = 2.0.5
+Provides: bundled(npm(fork-ts-checker-webpack-plugin)) = 4.1.6
 Provides: bundled(npm(fs-extra)) = 0.30.0
 Provides: bundled(npm(fuzzy)) = 0.1.3
-Provides: bundled(npm(gaze)) = 1.1.3
-Provides: bundled(npm(glob)) = 7.1.3
-Provides: bundled(npm(globby)) = 6.1.0
-Provides: bundled(npm(hoist-non-react-statics)) = 2.5.5
-Provides: bundled(npm(hoist-non-react-statics)) = 2.5.5
-Provides: bundled(npm(hoist-non-react-statics)) = 2.5.5
-Provides: bundled(npm(html-loader)) = 0.5.5
-Provides: bundled(npm(html-loader)) = 0.5.5
-Provides: bundled(npm(html-webpack-harddisk-plugin)) = 1.0.1
-Provides: bundled(npm(html-webpack-plugin)) = 3.2.0
-Provides: bundled(npm(html-webpack-plugin)) = 3.2.0
-Provides: bundled(npm(husky)) = 4.2.1
-Provides: bundled(npm(immutable)) = 3.8.2
+Provides: bundled(npm(glob)) = 7.2.0
+Provides: bundled(npm(globby)) = 9.2.0
+Provides: bundled(npm(history)) = 4.10.1
+Provides: bundled(npm(hoist-non-react-statics)) = 3.3.2
+Provides: bundled(npm(html-loader)) = 3.1.0
+Provides: bundled(npm(html-webpack-plugin)) = 4.5.2
+Provides: bundled(npm(http-server)) = 14.1.0
+Provides: bundled(npm(husky)) = 8.0.1
+Provides: bundled(npm(iconscout-unicons-tarball)) = 1.0.0
+Provides: bundled(npm(immer)) = 9.0.7
 Provides: bundled(npm(immutable)) = 3.8.2
-Provides: bundled(npm(inquirer)) = 0.12.0
+Provides: bundled(npm(inquirer)) = 7.3.3
 Provides: bundled(npm(is-hotkey)) = 0.1.4
-Provides: bundled(npm(jest)) = 26.6.3
-Provides: bundled(npm(jest)) = 26.6.3
-Provides: bundled(npm(jest-canvas-mock)) = 2.3.0
-Provides: bundled(npm(jest-canvas-mock)) = 2.3.0
+Provides: bundled(npm(jest)) = 27.5.1
+Provides: bundled(npm(jest-canvas-mock)) = 2.3.1
 Provides: bundled(npm(jest-coverage-badges)) = 1.1.2
 Provides: bundled(npm(jest-date-mock)) = 1.0.8
-Provides: bundled(npm(jest-environment-jsdom-fifteen)) = 1.0.2
-Provides: bundled(npm(jest-junit)) = 6.4.0
-Provides: bundled(npm(jest-matcher-utils)) = 26.0.0
-Provides: bundled(npm(jquery)) = 3.5.1
+Provides: bundled(npm(jest-fail-on-console)) = 2.4.1
+Provides: bundled(npm(jest-junit)) = 13.1.0
+Provides: bundled(npm(jest-matcher-utils)) = 27.5.1
+Provides: bundled(npm(jest-mock-console)) = 1.2.3
 Provides: bundled(npm(jquery)) = 3.5.1
+Provides: bundled(npm(js-yaml)) = 3.13.1
 Provides: bundled(npm(json-markup)) = 1.1.3
+Provides: bundled(npm(json-source-map)) = 0.6.1
 Provides: bundled(npm(jsurl)) = 0.1.5
-Provides: bundled(npm(lerna)) = 3.22.1
-Provides: bundled(npm(less)) = 3.11.1
-Provides: bundled(npm(less-loader)) = 5.0.0
-Provides: bundled(npm(lint-staged)) = 10.0.7
-Provides: bundled(npm(load-grunt-tasks)) = 5.1.0
-Provides: bundled(npm(lodash)) = 4.17.21
+Provides: bundled(npm(kbar)) = 0.1.0b34
+Provides: bundled(npm(lerna)) = 4.0.0
+Provides: bundled(npm(less)) = 4.1.2
+Provides: bundled(npm(less-loader)) = 10.2.0
+Provides: bundled(npm(lezer-promql)) = 0.22.0
+Provides: bundled(npm(lint-staged)) = 12.4.1
 Provides: bundled(npm(lodash)) = 4.17.21
-Provides: bundled(npm(lodash)) = 4.17.21
-Provides: bundled(npm(lodash)) = 4.17.21
-Provides: bundled(npm(lodash)) = 4.17.21
-Provides: bundled(npm(lodash)) = 4.17.21
-Provides: bundled(npm(lru-cache)) = 4.1.5
+Provides: bundled(npm(logfmt)) = 1.3.2
+Provides: bundled(npm(lru-cache)) = 5.1.1
 Provides: bundled(npm(lru-memoize)) = 1.1.0
-Provides: bundled(npm(marked)) = 2.0.1
-Provides: bundled(npm(md5)) = 2.2.1
-Provides: bundled(npm(md5-file)) = 4.0.0
-Provides: bundled(npm(memoize-one)) = 4.1.0
-Provides: bundled(npm(memoize-one)) = 4.1.0
-Provides: bundled(npm(mini-css-extract-plugin)) = 0.7.0
-Provides: bundled(npm(mini-css-extract-plugin)) = 0.7.0
-Provides: bundled(npm(mocha)) = 7.0.1
+Provides: bundled(npm(marked)) = 4.0.16
+Provides: bundled(npm(md5-file)) = 5.0.0
+Provides: bundled(npm(memoize-one)) = 4.0.3
+Provides: bundled(npm(mini-css-extract-plugin)) = 2.6.0
+Provides: bundled(npm(mocha)) = 10.0.0
 Provides: bundled(npm(mock-raf)) = 1.0.1
-Provides: bundled(npm(module-alias)) = 2.2.2
-Provides: bundled(npm(moment)) = 2.24.0
-Provides: bundled(npm(moment)) = 2.24.0
-Provides: bundled(npm(moment)) = 2.24.0
-Provides: bundled(npm(moment-timezone)) = 0.5.28
-Provides: bundled(npm(monaco-editor)) = 0.20.0
-Provides: bundled(npm(monaco-editor)) = 0.20.0
-Provides: bundled(npm(monaco-editor-webpack-plugin)) = 1.9.0
+Provides: bundled(npm(moment)) = 2.29.4
+Provides: bundled(npm(moment-timezone)) = 0.5.34
+Provides: bundled(npm(monaco-editor)) = 0.31.1
+Provides: bundled(npm(monaco-promql)) = 1.7.4
 Provides: bundled(npm(mousetrap)) = 1.6.5
 Provides: bundled(npm(mousetrap-global-bind)) = 1.1.0
-Provides: bundled(npm(mutationobserver-shim)) = 0.3.3
-Provides: bundled(npm(ngtemplate-loader)) = 2.0.1
-Provides: bundled(npm(nodemon)) = 2.0.2
-Provides: bundled(npm(optimize-css-assets-webpack-plugin)) = 5.0.4
-Provides: bundled(npm(optimize-css-assets-webpack-plugin)) = 5.0.4
-Provides: bundled(npm(ora)) = 4.0.3
-Provides: bundled(npm(papaparse)) = 5.3.0
-Provides: bundled(npm(papaparse)) = 5.3.0
-Provides: bundled(npm(pixelmatch)) = 5.1.0
+Provides: bundled(npm(moveable)) = 0.29.8
+Provides: bundled(npm(mutationobserver-shim)) = 0.3.7
+Provides: bundled(npm(ngtemplate-loader)) = 2.1.0
+Provides: bundled(npm(node-notifier)) = 10.0.1
+Provides: bundled(npm(nodemon)) = 2.0.16
+Provides: bundled(npm(ol)) = 6.14.1
+Provides: bundled(npm(ora)) = 5.4.1
+Provides: bundled(npm(papaparse)) = 5.3.1
+Provides: bundled(npm(pixelmatch)) = 5.2.1
+Provides: bundled(npm(pluralize)) = 8.0.0
 Provides: bundled(npm(pngjs)) = 2.3.1
-Provides: bundled(npm(postcss-browser-reporter)) = 0.6.0
-Provides: bundled(npm(postcss-flexbugs-fixes)) = 4.2.0
-Provides: bundled(npm(postcss-loader)) = 3.0.0
-Provides: bundled(npm(postcss-loader)) = 3.0.0
-Provides: bundled(npm(postcss-preset-env)) = 6.7.0
-Provides: bundled(npm(postcss-reporter)) = 6.0.1
-Provides: bundled(npm(prettier)) = 2.0.5
-Provides: bundled(npm(prettier)) = 2.0.5
-Provides: bundled(npm(pretty-format)) = 21.2.1
-Provides: bundled(npm(pretty-format)) = 21.2.1
-Provides: bundled(npm(pretty-format)) = 21.2.1
-Provides: bundled(npm(pretty-format)) = 21.2.1
-Provides: bundled(npm(prismjs)) = 1.21.0
+Provides: bundled(npm(postcss)) = 7.0.39
+Provides: bundled(npm(postcss-flexbugs-fixes)) = 4.2.1
+Provides: bundled(npm(postcss-loader)) = 4.3.0
+Provides: bundled(npm(postcss-preset-env)) = 7.4.3
+Provides: bundled(npm(postcss-reporter)) = 7.0.5
+Provides: bundled(npm(postcss-scss)) = 4.0.2
+Provides: bundled(npm(prettier)) = 2.3.0
+Provides: bundled(npm(prismjs)) = 1.27.0
+Provides: bundled(npm(process)) = 0.11.10
 Provides: bundled(npm(prop-types)) = 15.7.2
-Provides: bundled(npm(puppeteer-core)) = 1.18.1
-Provides: bundled(npm(rc-cascader)) = 1.0.1
-Provides: bundled(npm(rc-cascader)) = 1.0.1
-Provides: bundled(npm(rc-drawer)) = 3.1.3
-Provides: bundled(npm(rc-slider)) = 9.6.4
+Provides: bundled(npm(raw-loader)) = 4.0.2
+Provides: bundled(npm(rc-cascader)) = 3.5.0
+Provides: bundled(npm(rc-drawer)) = 4.4.3
+Provides: bundled(npm(rc-slider)) = 9.7.5
 Provides: bundled(npm(rc-time-picker)) = 3.7.3
-Provides: bundled(npm(re-resizable)) = 6.2.0
-Provides: bundled(npm(react)) = 16.13.1
-Provides: bundled(npm(react)) = 16.13.1
-Provides: bundled(npm(react-beautiful-dnd)) = 13.0.0
-Provides: bundled(npm(react-beautiful-dnd)) = 13.0.0
-Provides: bundled(npm(react-calendar)) = 2.19.2
-Provides: bundled(npm(react-color)) = 2.18.0
-Provides: bundled(npm(react-custom-scrollbars)) = 4.2.1
-Provides: bundled(npm(react-dev-utils)) = 10.2.1
+Provides: bundled(npm(re-resizable)) = 6.9.9
+Provides: bundled(npm(react)) = 17.0.1
+Provides: bundled(npm(react-beautiful-dnd)) = 13.1.0
+Provides: bundled(npm(react-calendar)) = 3.7.0
+Provides: bundled(npm(react-colorful)) = 5.5.1
+Provides: bundled(npm(react-custom-scrollbars-2)) = 4.4.0
+Provides: bundled(npm(react-dev-utils)) = 12.0.0
+Provides: bundled(npm(react-diff-viewer)) = 3.1.1
 Provides: bundled(npm(react-docgen-typescript-loader)) = 3.7.2
 Provides: bundled(npm(react-dom)) = 17.0.1
-Provides: bundled(npm(react-dom)) = 17.0.1
-Provides: bundled(npm(react-grid-layout)) = 1.2.0
-Provides: bundled(npm(react-highlight-words)) = 0.16.0
-Provides: bundled(npm(react-highlight-words)) = 0.16.0
-Provides: bundled(npm(react-hook-form)) = 5.1.3
-Provides: bundled(npm(react-hot-loader)) = 4.8.0
+Provides: bundled(npm(react-draggable)) = 4.4.4
+Provides: bundled(npm(react-dropzone)) = 12.0.4
+Provides: bundled(npm(react-grid-layout)) = 1.3.4
+Provides: bundled(npm(react-highlight-words)) = 0.18.0
+Provides: bundled(npm(react-hook-form)) = 7.5.3
 Provides: bundled(npm(react-icons)) = 2.2.7
-Provides: bundled(npm(react-is)) = 16.8.0
+Provides: bundled(npm(react-inlinesvg)) = 2.3.0
 Provides: bundled(npm(react-loadable)) = 5.5.0
-Provides: bundled(npm(react-monaco-editor)) = 0.36.0
-Provides: bundled(npm(react-popper)) = 2.2.4
-Provides: bundled(npm(react-popper)) = 2.2.4
-Provides: bundled(npm(react-redux)) = 7.2.0
-Provides: bundled(npm(react-reverse-portal)) = 2.0.1
-Provides: bundled(npm(react-select-event)) = 5.1.0
-Provides: bundled(npm(react-sizeme)) = 2.6.12
-Provides: bundled(npm(react-split-pane)) = 0.1.89
-Provides: bundled(npm(react-storybook-addon-props-combinations)) = 1.1.0
-Provides: bundled(npm(react-table)) = 7.0.0
-Provides: bundled(npm(react-test-renderer)) = 16.10.2
-Provides: bundled(npm(react-test-renderer)) = 16.10.2
-Provides: bundled(npm(react-transition-group)) = 4.3.0
-Provides: bundled(npm(react-transition-group)) = 4.3.0
-Provides: bundled(npm(react-use)) = 13.27.0
-Provides: bundled(npm(react-virtualized-auto-sizer)) = 1.0.2
-Provides: bundled(npm(react-window)) = 1.8.5
-Provides: bundled(npm(recompose)) = 0.25.1
-Provides: bundled(npm(redux)) = 3.7.2
-Provides: bundled(npm(redux-logger)) = 3.0.6
+Provides: bundled(npm(react-moveable)) = 0.32.7
+Provides: bundled(npm(react-popper)) = 2.2.5
+Provides: bundled(npm(react-popper-tooltip)) = 3.1.1
+Provides: bundled(npm(react-redux)) = 7.2.6
+Provides: bundled(npm(react-refresh)) = 0.11.0
+Provides: bundled(npm(react-resizable)) = 3.0.4
+Provides: bundled(npm(react-reverse-portal)) = 2.1.0
+Provides: bundled(npm(react-router-dom)) = 5.3.0
+Provides: bundled(npm(react-select)) = 3.2.0
+Provides: bundled(npm(react-select-event)) = 5.3.0
+Provides: bundled(npm(react-split-pane)) = 0.1.92
+Provides: bundled(npm(react-table)) = 7.8.0
+Provides: bundled(npm(react-test-renderer)) = 17.0.2
+Provides: bundled(npm(react-transition-group)) = 4.4.2
+Provides: bundled(npm(react-use)) = 17.3.2
+Provides: bundled(npm(react-virtualized-auto-sizer)) = 1.0.6
+Provides: bundled(npm(react-window)) = 1.8.7
+Provides: bundled(npm(react-window-infinite-loader)) = 1.0.7
+Provides: bundled(npm(redux)) = 4.1.1
 Provides: bundled(npm(redux-mock-store)) = 1.5.4
-Provides: bundled(npm(redux-thunk)) = 2.3.0
+Provides: bundled(npm(redux-thunk)) = 2.4.1
 Provides: bundled(npm(regenerator-runtime)) = 0.11.1
-Provides: bundled(npm(regexp-replace-loader)) = 1.0.1
-Provides: bundled(npm(replace-in-file)) = 4.1.3
 Provides: bundled(npm(replace-in-file-webpack-plugin)) = 1.0.6
-Provides: bundled(npm(reselect)) = 4.0.0
+Provides: bundled(npm(reselect)) = 4.1.0
 Provides: bundled(npm(resolve-as-bin)) = 2.1.0
-Provides: bundled(npm(rimraf)) = 2.6.3
-Provides: bundled(npm(rimraf)) = 2.6.3
-Provides: bundled(npm(rollup)) = 0.63.5
-Provides: bundled(npm(rollup)) = 0.63.5
-Provides: bundled(npm(rollup)) = 0.63.5
-Provides: bundled(npm(rollup)) = 0.63.5
-Provides: bundled(npm(rollup)) = 0.63.5
-Provides: bundled(npm(rollup-plugin-copy)) = 3.3.0
+Provides: bundled(npm(rimraf)) = 2.7.1
+Provides: bundled(npm(rollup)) = 2.74.1
+Provides: bundled(npm(rollup-plugin-copy)) = 3.4.0
 Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3
-Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3
-Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3
-Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3
-Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3
-Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2
+Provides: bundled(npm(rollup-plugin-svg-import)) = 1.6.0
 Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2
-Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2
-Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2
-Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2
-Provides: bundled(npm(rollup-plugin-typescript2)) = 0.29.0
-Provides: bundled(npm(rollup-plugin-typescript2)) = 0.29.0
-Provides: bundled(npm(rollup-plugin-typescript2)) = 0.29.0
-Provides: bundled(npm(rollup-plugin-typescript2)) = 0.29.0
-Provides: bundled(npm(rollup-plugin-typescript2)) = 0.29.0
-Provides: bundled(npm(rollup-plugin-visualizer)) = 4.2.0
-Provides: bundled(npm(rollup-plugin-visualizer)) = 4.2.0
-Provides: bundled(npm(rollup-plugin-visualizer)) = 4.2.0
-Provides: bundled(npm(rollup-plugin-visualizer)) = 4.2.0
-Provides: bundled(npm(rollup-plugin-visualizer)) = 4.2.0
 Provides: bundled(npm(rst2html)) = 1.0.4
-Provides: bundled(npm(rxjs)) = 6.5.5
-Provides: bundled(npm(rxjs)) = 6.5.5
-Provides: bundled(npm(rxjs-spy)) = 7.5.1
-Provides: bundled(npm(sass)) = 1.27.0
-Provides: bundled(npm(sass)) = 1.27.0
-Provides: bundled(npm(sass-lint)) = 1.12.1
-Provides: bundled(npm(sass-loader)) = 8.0.2
-Provides: bundled(npm(sass-loader)) = 8.0.2
-Provides: bundled(npm(search-query-parser)) = 1.5.4
+Provides: bundled(npm(rxjs)) = 6.6.7
+Provides: bundled(npm(sass)) = 1.50.1
+Provides: bundled(npm(sass-loader)) = 12.6.0
+Provides: bundled(npm(search-query-parser)) = 1.6.0
+Provides: bundled(npm(selecto)) = 1.16.2
 Provides: bundled(npm(semver)) = 5.7.1
-Provides: bundled(npm(simple-git)) = 1.132.0
-Provides: bundled(npm(sinon)) = 8.1.1
-Provides: bundled(npm(sinon)) = 8.1.1
-Provides: bundled(npm(slate)) = 0.47.8
-Provides: bundled(npm(slate)) = 0.47.8
-Provides: bundled(npm(slate-plain-serializer)) = 0.7.10
-Provides: bundled(npm(storybook-dark-mode)) = 1.0.4
-Provides: bundled(npm(style-loader)) = 1.1.3
-Provides: bundled(npm(style-loader)) = 1.1.3
+Provides: bundled(npm(simple-git)) = 3.7.1
+Provides: bundled(npm(sinon)) = 14.0.0
+Provides: bundled(npm(slate)) = 0.47.9
+Provides: bundled(npm(slate-plain-serializer)) = 0.7.11
+Provides: bundled(npm(slate-react)) = 0.22.10
+Provides: bundled(npm(storybook-dark-mode)) = 1.1.0
+Provides: bundled(npm(style-loader)) = 1.3.0
+Provides: bundled(npm(stylelint)) = 14.8.2
+Provides: bundled(npm(stylelint-config-prettier)) = 9.0.3
+Provides: bundled(npm(stylelint-config-sass-guidelines)) = 9.0.1
+Provides: bundled(npm(symbol-observable)) = 4.0.0
 Provides: bundled(npm(systemjs)) = 0.20.19
-Provides: bundled(npm(systemjs-plugin-css)) = 0.1.37
-Provides: bundled(npm(terser-webpack-plugin)) = 1.4.5
 Provides: bundled(npm(terser-webpack-plugin)) = 1.4.5
-Provides: bundled(npm(tether)) = 1.4.7
+Provides: bundled(npm(test)) = 0.0.0-use.local
+Provides: bundled(npm(testing-library-selector)) = 0.2.1
 Provides: bundled(npm(tether-drop)) = 1.5.0
-Provides: bundled(npm(tinycolor2)) = 1.4.1
-Provides: bundled(npm(tinycolor2)) = 1.4.1
-Provides: bundled(npm(tinycolor2)) = 1.4.1
-Provides: bundled(npm(ts-jest)) = 26.4.4
-Provides: bundled(npm(ts-jest)) = 26.4.4
+Provides: bundled(npm(tinycolor2)) = 1.4.2
+Provides: bundled(npm(tracelib)) = 1.0.1
+Provides: bundled(npm(ts-jest)) = 27.1.3
 Provides: bundled(npm(ts-loader)) = 6.2.1
-Provides: bundled(npm(ts-loader)) = 6.2.1
-Provides: bundled(npm(ts-loader)) = 6.2.1
-Provides: bundled(npm(ts-loader)) = 6.2.1
-Provides: bundled(npm(ts-node)) = 9.0.0
-Provides: bundled(npm(ts-node)) = 9.0.0
-Provides: bundled(npm(ts-node)) = 9.0.0
-Provides: bundled(npm(tslib)) = 1.10.0
-Provides: bundled(npm(tslib)) = 1.10.0
-Provides: bundled(npm(tti-polyfill)) = 0.2.2
+Provides: bundled(npm(ts-node)) = 9.1.1
+Provides: bundled(npm(tslib)) = 1.14.1
 Provides: bundled(npm(tween-functions)) = 1.2.0
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(typescript)) = 3.9.7
-Provides: bundled(npm(uplot)) = 1.6.9
-Provides: bundled(npm(url-loader)) = 2.2.0
-Provides: bundled(npm(uuid)) = 3.3.3
+Provides: bundled(npm(typescript)) = 4.5.5
+Provides: bundled(npm(uplot)) = 1.6.22
+Provides: bundled(npm(url-loader)) = 4.1.1
+Provides: bundled(npm(uuid)) = 3.4.0
+Provides: bundled(npm(vendor)) = 0.0.0-use.local
 Provides: bundled(npm(visjs-network)) = 4.25.0
-Provides: bundled(npm(webpack)) = 4.41.5
-Provides: bundled(npm(webpack)) = 4.41.5
-Provides: bundled(npm(webpack-bundle-analyzer)) = 3.6.0
-Provides: bundled(npm(webpack-cleanup-plugin)) = 0.5.1
-Provides: bundled(npm(webpack-cli)) = 3.3.10
-Provides: bundled(npm(webpack-dev-server)) = 3.11.1
+Provides: bundled(npm(wait-on)) = 6.0.1
+Provides: bundled(npm(webpack)) = 4.46.0
+Provides: bundled(npm(webpack-bundle-analyzer)) = 4.5.0
+Provides: bundled(npm(webpack-cli)) = 4.9.2
+Provides: bundled(npm(webpack-dev-server)) = 4.9.0
 Provides: bundled(npm(webpack-filter-warnings-plugin)) = 1.2.1
-Provides: bundled(npm(webpack-merge)) = 4.2.2
-Provides: bundled(npm(whatwg-fetch)) = 3.0.0
-Provides: bundled(npm(xss)) = 1.0.6
-Provides: bundled(npm(yaml)) = 1.7.2
-Provides: bundled(npm(yaml)) = 1.7.2
-Provides: bundled(npm(zone.js)) = 0.7.8
+Provides: bundled(npm(webpack-merge)) = 5.8.0
+Provides: bundled(npm(whatwg-fetch)) = 3.6.2
+Provides: bundled(npm(xss)) = 1.0.11
+Provides: bundled(npm(yaml)) = 1.10.2
 
 
 %description
@@ -773,29 +699,23 @@ rm -r plugins-bundled
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
-%ifarch s390x
 %patch4 -p1
-%endif
 %patch5 -p1
+%if 0%{?fedora} || 0%{?rhel} > 8
 %patch6 -p1
+%endif
+%patch7 -p1
 %patch8 -p1
 %patch9 -p1
-%if %{enable_fips_mode}
 %patch10 -p1
+
+%patch1001 -p1
+%if %{enable_fips_mode}
+%patch1002 -p1
 %endif
-%if 0%{?fedora} || 0%{?rhel} > 8
-%patch11 -p1
+%ifarch s390x i686 armv7hl
+%patch1003 -p1
 %endif
-%patch12 -p1
-%patch13 -p1
-%patch14 -p1
-%patch15 -p1
-%patch16 -p1
-
-# Set up build subdirs and links
-mkdir -p %{_builddir}/src/github.com/grafana
-ln -s %{_builddir}/%{name}-%{version} \
-    %{_builddir}/src/github.com/grafana/grafana
 
 
 %build
@@ -805,10 +725,12 @@ ln -s %{_builddir}/%{name}-%{version} \
 %endif
 
 # Build the backend
-cd %{_builddir}/src/github.com/grafana/grafana
-export GOPATH=%{_builddir}
 
-# see grafana-X.X.X/build.go
+# required since RHEL 8.8 to fix the following error:
+# "imports crypto/boring: build constraints exclude all Go files in /usr/lib/golang/src/crypto/boring"
+# can be removed in a future Go release
+export GOEXPERIMENT=boringcrypto
+# see grafana-X.Y.Z/pkg/build/cmd.go
 export LDFLAGS="-X main.version=%{version} -X main.buildstamp=${SOURCE_DATE_EPOCH}"
 for cmd in grafana-cli grafana-server; do
     %gobuild -o %{_builddir}/bin/${cmd} ./pkg/cmd/${cmd}
@@ -821,6 +743,8 @@ install -d %{buildroot}%{_sbindir}
 install -d %{buildroot}%{_datadir}/%{name}
 install -d %{buildroot}%{_libexecdir}/%{name}
 cp -a conf public plugins-bundled %{buildroot}%{_datadir}/%{name}
+rm %{buildroot}%{_datadir}/%{name}/public/img/icons/.gitignore
+rm %{buildroot}%{_datadir}/%{name}/public/lib/.gitignore
 
 # wrappers
 install -p -m 755 packaging/wrappers/grafana-cli %{buildroot}%{_sbindir}/%{name}-cli
@@ -836,6 +760,7 @@ install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1
 # config dirs
 install -d %{buildroot}%{_sysconfdir}/%{name}
 install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning
+install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/access-control
 install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/dashboards
 install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/datasources
 install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/notifiers
@@ -843,9 +768,10 @@ install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/plugins
 install -d %{buildroot}%{_sysconfdir}/sysconfig
 
 # config defaults
-install -p -m 640 %{SOURCE3} %{buildroot}%{_sysconfdir}/%{name}/grafana.ini
+install -p -m 640 conf/sample.ini %{buildroot}%{_sysconfdir}/%{name}/grafana.ini
 install -p -m 640 conf/ldap.toml %{buildroot}%{_sysconfdir}/%{name}/ldap.toml
-install -p -m 644 %{SOURCE3} %{buildroot}%{_datadir}/%{name}/conf/defaults.ini
+install -p -m 644 conf/defaults.ini %{buildroot}%{_datadir}/%{name}/conf/defaults.ini
+install -p -m 644 conf/sample.ini %{buildroot}%{_datadir}/%{name}/conf/sample.ini
 install -p -m 644 packaging/rpm/sysconfig/grafana-server \
     %{buildroot}%{_sysconfdir}/sysconfig/grafana-server
 
@@ -866,12 +792,11 @@ install -d %{buildroot}%{_tmpfilesdir}
 echo "d %{_rundir}/%{name} 0755 %{GRAFANA_USER} %{GRAFANA_GROUP} -" \
     > %{buildroot}%{_tmpfilesdir}/%{name}.conf
 
+# systemd-sysusers configuration
+install -p -m 644 -D %{SOURCE3} %{buildroot}%{_sysusersdir}/%{name}.conf
+
 %pre
-getent group %{GRAFANA_GROUP} >/dev/null || groupadd -r %{GRAFANA_GROUP}
-getent passwd %{GRAFANA_USER} >/dev/null || \
-    useradd -r -g %{GRAFANA_GROUP} -d %{GRAFANA_HOME} -s /sbin/nologin \
-    -c "%{GRAFANA_USER} user account" %{GRAFANA_USER}
-exit 0
+%sysusers_create_compat %{SOURCE3}
 
 %preun
 %systemd_preun grafana-server.service
@@ -906,22 +831,20 @@ chmod 640 %{_sysconfdir}/%{name}/ldap.toml
 %check
 # Test frontend
 %if %{compile_frontend}
-node_modules/.bin/jest
+yarn run jest
 %endif
 
 # Test backend
-cd %{_builddir}/src/github.com/grafana/grafana
-export GOPATH=%{_builddir}
 
 # in setting_test.go there is a unit test which checks if 10 days are 240 hours
-# which is usually true except if the dayligt saving time change falls into the last 10 days, then it's either 239 or 241 hours...
+# which is usually true except if the daylight saving time change falls into the last 10 days, then it's either 239 or 241 hours...
 # let's set the time zone to a time zone without daylight saving time
 export TZ=GMT
 
-# GO111MODULE=on automatically skips vendored macaron sources in pkg/macaron
-# GO111MODULE=off doesn't skip them, and fails with an error due to the canoncial import path
-rm -r pkg/macaron
-
+# required since RHEL 8.8 to fix the following error:
+# "imports crypto/boring: build constraints exclude all Go files in /usr/lib/golang/src/crypto/boring"
+# can be removed in a future Go release
+export GOEXPERIMENT=boringcrypto
 %gotest ./pkg/...
 
 %if %{enable_fips_mode}
@@ -938,6 +861,7 @@ OPENSSL_FORCE_FIPS_MODE=1 GOLANG_FIPS=1 go test -v ./pkg/util -run TestEncryptio
 %config(noreplace) %{_sysconfdir}/sysconfig/grafana-server
 %dir %{_sysconfdir}/%{name}
 %attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning
+%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/access-control
 %attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/dashboards
 %attr(0750, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/datasources
 %attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/notifiers
@@ -951,7 +875,6 @@ OPENSSL_FORCE_FIPS_MODE=1 GOLANG_FIPS=1 go test -v ./pkg/util -run TestEncryptio
 
 # shared directory and all files therein
 %{_datadir}/%{name}
-%attr(-, root, %{GRAFANA_GROUP}) %{_datadir}/%{name}/conf/*
 
 # systemd service file
 %{_unitdir}/grafana-server.service
@@ -959,6 +882,9 @@ OPENSSL_FORCE_FIPS_MODE=1 GOLANG_FIPS=1 go test -v ./pkg/util -run TestEncryptio
 # Grafana configuration to dynamically create /run/grafana/grafana.pid on tmpfs
 %{_tmpfilesdir}/%{name}.conf
 
+# systemd-sysusers configuration file
+%{_sysusersdir}/%{name}.conf
+
 # log directory - grafana.log is created by grafana-server, and it does it's own log rotation
 %attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_localstatedir}/log/%{name}
 
@@ -967,12 +893,30 @@ OPENSSL_FORCE_FIPS_MODE=1 GOLANG_FIPS=1 go test -v ./pkg/util -run TestEncryptio
 %{_mandir}/man1/%{name}-cli.1*
 
 # other docs and license
-%license LICENSE
-%doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md GOVERNANCE.md ISSUE_TRIAGE.md MAINTAINERS.md NOTICE.md
+%license LICENSE LICENSING.md NOTICE.md
+%doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md GOVERNANCE.md HALL_OF_FAME.md ISSUE_TRIAGE.md MAINTAINERS.md
 %doc PLUGIN_DEV.md README.md ROADMAP.md SECURITY.md SUPPORT.md UPGRADING_DEPENDENCIES.md WORKFLOW.md
 
 
 %changelog
+* Tue Nov 01 2022 Stan Cox <scox@redhat.com> 9.0.9-2
+- resolve CVE-2022-39229 grafana: Using email as a username can prevent other users from signing in
+- resolve CVE-2022-2880 CVE-2022-41715 grafana: various flaws
+
+* Wed Sep 21 2022 Andreas Gerstmayr <agerstmayr@redhat.com> 9.0.9-1
+- update to 9.0.9 tagged upstream community sources, see CHANGELOG
+- resolve CVE-2022-35957 grafana: Escalation from admin to server admin when auth proxy is used (rhbz#2125530)
+
+* Tue Sep 20 2022 Andreas Gerstmayr <agerstmayr@redhat.com> 9.0.8-2
+- bump NVR
+
+* Thu Sep 15 2022 Andreas Gerstmayr <agerstmayr@redhat.com> 9.0.8-1
+- update to 9.0.8 tagged upstream community sources, see CHANGELOG
+- do not list /usr/share/grafana/conf twice
+- drop makefile in favor of create_bundles.sh script
+- sync provides/obsoletes with CentOS versions
+- drop husky patch
+
 * Thu Aug 11 2022 Andreas Gerstmayr <agerstmayr@redhat.com> 7.5.15-3
 - resolve CVE-2022-1962 golang: go/parser: stack exhaustion in all Parse* functions
 - resolve CVE-2022-1705 golang: net/http: improper sanitization of Transfer-Encoding header