From 1e8584281ae5f756b551a0023195a13849a29b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20J=C3=B6rg?= Date: Tue, 20 Jan 2026 18:50:22 +0100 Subject: [PATCH] devel: Remove attic It's now available on the attic branch. --- attic/.helmignore | 26 - attic/Chart.yaml | 27 - attic/charts/cilium/.helmignore | 23 - attic/charts/cilium/Chart.yaml | 24 - ...rkPolicy-allow-applicationset-ingress.yaml | 14 - ...etworkPolicy-allow-argo-notifications.yaml | 13 - ...allow-argo-repo-access-applicationset.yaml | 13 - ...mNetworkPolicy-allow-argo-repo-access.yaml | 13 - ...tworkPolicy-allow-chartmuseum-ingress.yaml | 14 - ...olicy-allow-image-updater-repo-access.yaml | 13 - .../CiliumNetworkPolicy-allow-ingress.yaml | 14 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - ...liumNetworkPolicy-allow-microsoft-sso.yaml | 16 - ...licy-allow-prometheus-metrics-rollout.yaml | 18 - ...cy-allow-prometheus-metrics-workflows.yaml | 18 - ...etworkPolicy-allow-prometheus-metrics.yaml | 30 - ...licy-allow-api-server-to-cert-manager.yaml | 13 - .../CiliumNetworkPolicy-allow-api-server.yaml | 12 - ...etworkPolicy-allow-prometheus-metrics.yaml | 18 - ...liumNetworkPolicy-allow-world-traffic.yaml | 12 - .../CiliumNetworkPolicy-allow-api-server.yaml | 15 - ...orkPolicy-allow-remote-node-to-server.yaml | 15 - .../CiliumNetworkPolicy-allow-api-server.yaml | 22 - ...rwideNetworkPolicy-allow-acme-solvers.yaml | 13 - ...iumClusterwideNetworkPolicy-allow-dns.yaml | 24 - ...eNetworkPolicy-allow-mariadb-operator.yaml | 18 - ...liumClusterwideNetworkPolicy-allow-s3.yaml | 20 - ...ideNetworkPolicy-cilium-health-checks.yaml | 15 - ...liumClusterwideNetworkPolicy-deny-all.yaml | 9 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...iumNetworkPolicy-allow-hubble-traffic.yaml | 14 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - .../CiliumNetworkPolicy-allow-s3-traffic.yaml | 19 - ...rkPolicy-allow-world-to-ingress-nginx.yaml | 19 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - ...orkPolicy-allow-remote-node-to-jaeger.yaml | 12 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - ...etworkPolicy-allow-controller-metrics.yaml | 18 - ...CiliumNetworkPolicy-allow-csi-webhook.yaml | 12 - ...CiliumNetworkPolicy-allow-dns-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-dns-world.yaml | 31 - .../CiliumNetworkPolicy-allow-dns.yaml | 19 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...iumNetworkPolicy-allow-hubble-ingress.yaml | 14 - ...orkPolicy-allow-hubble-oauth2-ingress.yaml | 14 - ...workPolicy-allow-hubble-relay-metrics.yaml | 18 - ...liumNetworkPolicy-allow-microsoft-sso.yaml | 15 - ...NetworkPolicy-allow-namespace-traffic.yaml | 26 - ...liumNetworkPolicy-allow-proxy-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-api-server.yaml | 15 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - ...rkPolicy-allow-remote-node-to-kyverno.yaml | 12 - ...licy-allow-loki-backend-to-api-server.yaml | 18 - ...etworkPolicy-allow-prometheus-metrics.yaml | 20 - ...rkPolicy-allow-promtail-to-api-server.yaml | 17 - ...liumNetworkPolicy-allow-stats-grafana.yaml | 13 - .../CiliumNetworkPolicy-allow-api-server.yaml | 12 - ...umNetworkPolicy-allow-host-to-mariadb.yaml | 12 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - ...workPolicy-allow-remote-node-webhooks.yaml | 18 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...olicy-allow-remote-node-to-agent-core.yaml | 13 - ...tworkPolicy-allow-remote-node-to-etcd.yaml | 13 - ...tworkPolicy-allow-remote-node-to-maya.yaml | 13 - ...usterwideNetworkPolicy-allow-kube-api.yaml | 16 - ...ideNetworkPolicy-allow-minio-operator.yaml | 17 - ...eNetworkPolicy-allow-nodeport-ingress.yaml | 16 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-port-4317.yaml | 16 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - ...w-otel-collector-loadbalancer-ingress.yaml | 13 - ...CiliumNetworkPolicy-allow-mail-egress.yaml | 13 - ...iliumNetworkPolicy-allow-mail-ingress.yaml | 21 - ...etworkPolicy-allow-prometheus-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-alerting.yaml | 13 - ...workPolicy-allow-alertmanager-ingress.yaml | 14 - ...CiliumNetworkPolicy-allow-dns-metrics.yaml | 15 - ...iliumNetworkPolicy-allow-etcd-metrics.yaml | 15 - ...umNetworkPolicy-allow-grafana-ingress.yaml | 14 - ...etworkPolicy-allow-grafana-oidc-login.yaml | 16 - ...umNetworkPolicy-allow-grafana-plugins.yaml | 15 - ...kPolicy-allow-grafana-secure-gravatar.yaml | 14 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...liumNetworkPolicy-allow-nginx-ingress.yaml | 14 - ...umNetworkPolicy-allow-opencost-scrape.yaml | 19 - ...y-allow-remote-node-to-metrics-server.yaml | 13 - ...rkPolicy-allow-remote-node-to-webhook.yaml | 13 - ...umNetworkPolicy-allow-robusta-ingress.yaml | 14 - ...liumNetworkPolicy-allow-stats-grafana.yaml | 13 - ...etworkPolicy-allow-inter-node-traffic.yaml | 52 - ...mNetworkPolicy-allow-operator-traffic.yaml | 18 - ...mNetworkPolicy-allow-rabbitmq-traffic.yaml | 27 - .../CiliumNetworkPolicy-allow-ingress.yaml | 13 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-slack.yaml | 11 - ...umNetworkPolicy-allow-oceanbox-subnet.yaml | 19 - ...CiliumNetworkPolicy-allow-s3-internal.yaml | 14 - .../CiliumNetworkPolicy-allow-s3-sync.yaml | 12 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - .../CiliumNetworkPolicy-allow-api-server.yaml | 14 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...iumNetworkPolicy-allow-job-api-server.yaml | 16 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - attic/charts/cilium/values.yaml | 5 - attic/charts/sys-cilium-policies/.helmignore | 23 - attic/charts/sys-cilium-policies/Chart.yaml | 24 - ...rkPolicy-allow-applicationset-ingress.yaml | 14 - ...etworkPolicy-allow-argo-notifications.yaml | 13 - ...allow-argo-repo-access-applicationset.yaml | 13 - ...mNetworkPolicy-allow-argo-repo-access.yaml | 13 - ...tworkPolicy-allow-chartmuseum-ingress.yaml | 14 - ...olicy-allow-image-updater-repo-access.yaml | 13 - .../CiliumNetworkPolicy-allow-ingress.yaml | 14 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - ...liumNetworkPolicy-allow-microsoft-sso.yaml | 16 - ...licy-allow-prometheus-metrics-rollout.yaml | 18 - ...cy-allow-prometheus-metrics-workflows.yaml | 18 - ...etworkPolicy-allow-prometheus-metrics.yaml | 30 - ...rwideNetworkPolicy-allow-acme-solvers.yaml | 13 - ...iumClusterwideNetworkPolicy-allow-dns.yaml | 24 - ...eNetworkPolicy-allow-mariadb-operator.yaml | 18 - ...liumClusterwideNetworkPolicy-deny-all.yaml | 9 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...iumNetworkPolicy-allow-hubble-traffic.yaml | 14 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - .../CiliumNetworkPolicy-allow-s3-traffic.yaml | 19 - ...rkPolicy-allow-world-to-ingress-nginx.yaml | 19 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - ...orkPolicy-allow-remote-node-to-jaeger.yaml | 12 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - ...etworkPolicy-allow-controller-metrics.yaml | 18 - ...CiliumNetworkPolicy-allow-csi-webhook.yaml | 12 - ...CiliumNetworkPolicy-allow-dns-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-dns-world.yaml | 31 - .../CiliumNetworkPolicy-allow-dns.yaml | 19 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...iumNetworkPolicy-allow-hubble-ingress.yaml | 14 - ...orkPolicy-allow-hubble-oauth2-ingress.yaml | 14 - ...workPolicy-allow-hubble-relay-metrics.yaml | 18 - ...liumNetworkPolicy-allow-microsoft-sso.yaml | 15 - ...NetworkPolicy-allow-namespace-traffic.yaml | 26 - ...liumNetworkPolicy-allow-proxy-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-api-server.yaml | 15 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - ...rkPolicy-allow-remote-node-to-kyverno.yaml | 12 - ...licy-allow-loki-backend-to-api-server.yaml | 18 - ...etworkPolicy-allow-prometheus-metrics.yaml | 20 - ...rkPolicy-allow-promtail-to-api-server.yaml | 17 - ...liumNetworkPolicy-allow-stats-grafana.yaml | 13 - .../CiliumNetworkPolicy-allow-api-server.yaml | 12 - ...umNetworkPolicy-allow-host-to-mariadb.yaml | 12 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - ...workPolicy-allow-remote-node-webhooks.yaml | 18 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...olicy-allow-remote-node-to-agent-core.yaml | 13 - ...tworkPolicy-allow-remote-node-to-etcd.yaml | 13 - ...tworkPolicy-allow-remote-node-to-maya.yaml | 13 - ...usterwideNetworkPolicy-allow-kube-api.yaml | 16 - ...ideNetworkPolicy-allow-minio-operator.yaml | 17 - ...eNetworkPolicy-allow-nodeport-ingress.yaml | 16 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-port-4317.yaml | 16 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...workPolicy-allow-remote-node-webhooks.yaml | 15 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - ...w-otel-collector-loadbalancer-ingress.yaml | 13 - .../CiliumNetworkPolicy-allow-ext.yaml | 14 - .../CiliumNetworkPolicy-allow-gravatar.yaml | 15 - ...CiliumNetworkPolicy-allow-mail-egress.yaml | 13 - ...iliumNetworkPolicy-allow-mail-ingress.yaml | 21 - ...etworkPolicy-allow-prometheus-metrics.yaml | 18 - .../CiliumNetworkPolicy-allow-alerting.yaml | 13 - ...workPolicy-allow-alertmanager-ingress.yaml | 14 - ...CiliumNetworkPolicy-allow-dns-metrics.yaml | 15 - ...iliumNetworkPolicy-allow-etcd-metrics.yaml | 15 - ...umNetworkPolicy-allow-grafana-ingress.yaml | 14 - ...etworkPolicy-allow-grafana-oidc-login.yaml | 16 - ...umNetworkPolicy-allow-grafana-plugins.yaml | 15 - ...kPolicy-allow-grafana-secure-gravatar.yaml | 14 - ...iliumNetworkPolicy-allow-host-traffic.yaml | 14 - ...liumNetworkPolicy-allow-nginx-ingress.yaml | 14 - ...umNetworkPolicy-allow-opencost-scrape.yaml | 19 - ...y-allow-remote-node-to-metrics-server.yaml | 13 - ...rkPolicy-allow-remote-node-to-webhook.yaml | 13 - ...umNetworkPolicy-allow-robusta-ingress.yaml | 14 - ...liumNetworkPolicy-allow-stats-grafana.yaml | 13 - ...etworkPolicy-allow-inter-node-traffic.yaml | 52 - ...mNetworkPolicy-allow-operator-traffic.yaml | 18 - ...mNetworkPolicy-allow-rabbitmq-traffic.yaml | 27 - .../CiliumNetworkPolicy-allow-ingress.yaml | 13 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 15 - .../CiliumNetworkPolicy-allow-slack.yaml | 12 - ...umNetworkPolicy-allow-oceanbox-subnet.yaml | 19 - ...CiliumNetworkPolicy-allow-s3-internal.yaml | 14 - .../CiliumNetworkPolicy-allow-s3-sync.yaml | 12 - .../CiliumNetworkPolicy-allow-kube-api.yaml | 16 - .../CiliumNetworkPolicy-allow-api-server.yaml | 14 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...iumNetworkPolicy-allow-job-api-server.yaml | 16 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - .../CiliumNetworkPolicy-allow-api-server.yaml | 16 - ...etworkPolicy-allow-prometheus-metrics.yaml | 17 - attic/charts/sys-cilium-policies/values.yaml | 5 - attic/nix/atlantis.nix | 58 - attic/nix/default.nix | 7 - attic/nix/openfga.nix | 37 - attic/old/jaeger-operator.yaml | 24 - attic/old/loki.yaml | 152 - attic/old/opentelemetry-collector.yaml | 111 - attic/old/tempo.yaml | 78 - attic/policy.hujson | 148 - .../templates/actions-runner-controller.yaml | 42 - attic/templates/argo-rollouts.yaml | 37 - attic/templates/argo-workflows.yaml | 43 - attic/templates/argocd-apps.yaml | 154 - attic/templates/busynix.yaml | 23 - attic/templates/cert-manager.yaml | 36 - attic/templates/chartmuseum.yaml | 60 - attic/templates/clickhouse.yaml | 45 - attic/templates/dapr.yaml | 35 - attic/templates/dex.yaml | 29 - attic/templates/downscaler.yaml | 47 - attic/templates/geoserver.yaml | 27 - attic/templates/gitlab-runner.yaml | 78 - attic/templates/headscale.yaml | 23 - attic/templates/ingress-nginx.yaml | 132 - attic/templates/jaeger-operator.yaml | 36 - attic/templates/keycloak.yaml | 39 - attic/templates/kubernetes-dashboard.yaml | 30 - attic/templates/kyverno.yaml | 84 - attic/templates/linkerd-crds.yaml | 35 - attic/templates/linkerd-multicluster.yaml | 35 - attic/templates/linkerd.yaml | 100 - attic/templates/loki.yaml | 145 - attic/templates/mariadb-operator.yaml | 46 - attic/templates/metricserver.yaml | 39 - attic/templates/nfs-provisioner.yaml | 46 - attic/templates/oncall.yaml | 104 - attic/templates/openfga.yaml | 43 - attic/templates/osm-tile-server.yaml | 36 - attic/templates/otel-collector.yaml | 117 - attic/templates/plausible.yaml | 75 - .../policies/cnpg-add-backup-section.yaml | 52 - .../policies/cnpg-clone-secrets.yaml | 36 - .../generate-external-admin-rolebinding.yaml | 55 - ...heus-add-folder-to-default-dashboards.yaml | 32 - attic/templates/policies/sync-gitlab.yaml | 31 - attic/templates/policies/sync-regcred.yaml | 33 - attic/templates/policies/sync-s3-secret.yaml | 33 - .../whitelist-internal-ingresses.yaml | 73 - attic/templates/postgres-operator.yaml | 39 - attic/templates/prometheus-thanos.yaml | 342 - attic/templates/prometheus.yaml | 625 - attic/templates/promtail.yaml | 50 - attic/templates/rabbitmq-operator.yaml | 60 - attic/templates/rabbitmq.yaml | 36 - attic/templates/redis.yaml | 30 - .../resources/cluster-auth-rbac.yaml | 47 - .../resources/dashboards/argocd.yaml | 4260 --- .../resources/dashboards/cnpg-postgres.yaml | 3908 --- .../dotdc-grafana-dashboards-kubernetes.yaml | 21313 ---------------- .../resources/dashboards/gitlab-runner.yaml | 1822 -- .../dashboards/persistent-volume-usage.yaml | 1592 -- .../resources/dashboards/rabbitmq.yaml | 372 - .../resources/dashboards/velero.yaml | 2214 -- .../dashboards/x509-exporter-dashbaoard.yaml | 2011 -- .../resources/external-clusterrole.yaml | 209 - .../external-clusterrolebinding.yaml | 14 - .../resources/kube-flannel-rbac.yaml | 42 - .../templates/resources/kube-proxy-rbac.yaml | 51 - .../resources/kyverno-cluster-admin.yaml | 17 - ...erno-generate-cilium-network-policies.yaml | 29 - .../resources/label-and-taint-nodes.yaml | 96 - attic/templates/resources/operator-role.yaml | 12 - .../templates/resources/pre-cert-manager.yaml | 225 - .../resources/pre-gitlab-runner.yaml | 128 - attic/templates/resources/pre-linkerd.yaml | 206 - .../resources/x509-certificates.yaml | 48 - attic/templates/seq.yaml | 22 - attic/templates/sorcerer.yaml | 58 - attic/templates/tempo.yaml | 90 - attic/templates/velero.yaml | 109 - attic/templates/wordpress.yaml | 22 - attic/templates/x509-exporter.yaml | 53 - attic/templates/yolo-dl.yaml | 16 - attic/templates/yolo-registry.yaml | 16 - attic/values.yaml | 404 - .../archmeister/base/deployment_patch.yaml | 9 - .../archmeister/base/kustomization.yaml | 10 - attic/values/archmeister/chart | 1 - .../values/archmeister/prod/appsettings.json | 48 - attic/values/archmeister/prod/default.env | 2 - .../archmeister/prod/deployment_patch.yaml | 44 - .../archmeister/prod/ingress_patch.yaml | 3 - .../archmeister/prod/kustomization.yaml | 25 - .../archmeister/staging/appsettings.json | 43 - attic/values/archmeister/staging/default.env | 2 - .../archmeister/staging/deployment_patch.yaml | 49 - .../archmeister/staging/ingress_patch.yaml | 6 - .../archmeister/staging/kustomization.yaml | 25 - attic/values/archmeister/values-prod.yaml | 45 - attic/values/archmeister/values-staging.yaml | 39 - .../cerbos/manifests/cerbos-gitlab-token.yaml | 7 - attic/values/cerbos/values-prod.yaml | 3 - attic/values/cerbos/values-staging.yaml | 3 - attic/values/cerbos/values.yaml | 46 - attic/values/dex/resources/dex-volumes.yaml | 31 - .../dex/templates/.config/dotnet-tools.json | 18 - attic/values/dex/templates/.gitignore | 355 - .../values/dex/templates/.vscode/launch.json | 12 - .../dex/templates/.vscode/settings.json | 8 - attic/values/dex/templates/DexTemplates.sln | 22 - attic/values/dex/templates/README.md | 24 - attic/values/dex/templates/deploy.sh | 17 - .../dex/static/img/atlassian-crowd-icon.svg | 17 - .../dex/static/img/bitbucket-icon.svg | 5 - .../templates/dex/static/img/email-icon.svg | 12 - .../templates/dex/static/img/gitea-icon.svg | 1 - .../templates/dex/static/img/github-icon.svg | 5 - .../templates/dex/static/img/gitlab-icon.svg | 53 - .../templates/dex/static/img/google-icon.svg | 16 - .../dex/static/img/keystone-icon.svg | 12 - .../templates/dex/static/img/ldap-icon.svg | 12 - .../dex/static/img/linkedin-icon.svg | 1 - .../dex/static/img/microsoft-icon.svg | 9 - .../dex/templates/dex/static/img/ob.png | Bin 584723 -> 0 bytes .../templates/dex/static/img/oidc-icon.svg | 156 - .../templates/dex/static/img/saml-icon.svg | 12 - .../templates/dex/static/js/index.c3f9eb2e.js | 44 - .../dex/static/js/vendor.86e21c29.js | 1393 - .../dex/templates/dex/static/logout.html | 43 - .../values/dex/templates/dex/static/main.css | 148 - .../dex/templates/dex/templates/approval.html | 44 - .../dex/templates/dex/templates/device.html | 23 - .../dex/templates/device_success.html | 8 - .../dex/templates/dex/templates/error.html | 8 - .../dex/templates/dex/templates/footer.html | 3 - .../dex/templates/dex/templates/header.html | 31 - .../dex/templates/dex/templates/login.html | 23 - .../dex/templates/dex/templates/oob.html | 9 - .../dex/templates/dex/templates/password.html | 35 - .../dex/templates/dex/themes/dark/favicon.png | Bin 10415 -> 0 bytes .../dex/templates/dex/themes/dark/logo.png | Bin 24387 -> 0 bytes .../dex/templates/dex/themes/dark/styles.css | 122 - .../templates/dex/themes/light/favicon.png | Bin 10415 -> 0 bytes .../dex/templates/dex/themes/light/logo.png | Bin 24829 -> 0 bytes .../dex/templates/dex/themes/light/styles.css | 113 - attic/values/dex/templates/index.html | 29 - attic/values/dex/templates/package-lock.json | 6876 ----- attic/values/dex/templates/package.json | 17 - attic/values/dex/templates/src/App.fs | 129 - .../dex/templates/src/DexTemplates.fsproj | 12 - attic/values/dex/values-prod.yaml | 26 - attic/values/dex/values-staging.yaml | 21 - attic/values/dex/values.yaml | 37 - .../values/hipster/base/deployment_patch.yaml | 9 - attic/values/hipster/base/kustomization.yaml | 14 - attic/values/hipster/base/service_patch.yaml | 7 - attic/values/hipster/chart | 1 - attic/values/hipster/prod/appsettings.json | 18 - attic/values/hipster/prod/bindings.yaml | 26 - attic/values/hipster/prod/default.env | 2 - .../values/hipster/prod/deployment_patch.yaml | 37 - attic/values/hipster/prod/kustomization.yaml | 19 - attic/values/hipster/staging/appsettings.json | 18 - attic/values/hipster/staging/bindings.yaml | 26 - attic/values/hipster/staging/default.env | 2 - .../hipster/staging/deployment_patch.yaml | 37 - .../values/hipster/staging/kustomization.yaml | 19 - attic/values/hipster/values-prod.yaml | 23 - attic/values/hipster/values-staging.yaml | 23 - attic/values/jaeger/values.yaml | 3 - .../petimeter/base/deployment_patch.yaml | 9 - .../values/petimeter/base/kustomization.yaml | 10 - attic/values/petimeter/chart | 1 - attic/values/petimeter/prod/appsettings.json | 32 - attic/values/petimeter/prod/default.env | 2 - .../petimeter/prod/deployment_patch.yaml | 23 - .../values/petimeter/prod/kustomization.yaml | 18 - .../values/petimeter/staging/appsettings.json | 34 - attic/values/petimeter/staging/default.env | 2 - .../petimeter/staging/deployment_patch.yaml | 23 - .../petimeter/staging/kustomization.yaml | 18 - attic/values/petimeter/values-prod.yaml | 32 - attic/values/petimeter/values-staging.yaml | 33 - attic/values/seq/values.yaml | 122 - 404 files changed, 58007 deletions(-) delete mode 100644 attic/.helmignore delete mode 100644 attic/Chart.yaml delete mode 100644 attic/charts/cilium/.helmignore delete mode 100644 attic/charts/cilium/Chart.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml delete mode 100644 attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server-to-cert-manager.yaml delete mode 100644 attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-world-traffic.yaml delete mode 100644 attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-remote-node-to-server.yaml delete mode 100644 attic/charts/cilium/templates/cilium-test/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-dns.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-s3.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-cilium-health-checks.yaml delete mode 100644 attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-deny-all.yaml delete mode 100644 attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml delete mode 100644 attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml delete mode 100644 attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml delete mode 100644 attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml delete mode 100644 attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml delete mode 100644 attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml delete mode 100644 attic/charts/cilium/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml delete mode 100644 attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml delete mode 100644 attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml delete mode 100644 attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml delete mode 100644 attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml delete mode 100644 attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml delete mode 100644 attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml delete mode 100644 attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml delete mode 100644 attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml delete mode 100644 attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml delete mode 100644 attic/charts/cilium/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml delete mode 100644 attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/cilium/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml delete mode 100644 attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml delete mode 100644 attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml delete mode 100644 attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml delete mode 100644 attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml delete mode 100644 attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml delete mode 100644 attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml delete mode 100644 attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml delete mode 100644 attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml delete mode 100644 attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml delete mode 100644 attic/charts/cilium/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml delete mode 100644 attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml delete mode 100644 attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml delete mode 100644 attic/charts/cilium/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/cilium/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml delete mode 100644 attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/cilium/values.yaml delete mode 100644 attic/charts/sys-cilium-policies/.helmignore delete mode 100644 attic/charts/sys-cilium-policies/Chart.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-dns.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-deny-all.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-ext.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-gravatar.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml delete mode 100644 attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml delete mode 100644 attic/charts/sys-cilium-policies/values.yaml delete mode 100644 attic/nix/atlantis.nix delete mode 100644 attic/nix/default.nix delete mode 100644 attic/nix/openfga.nix delete mode 100644 attic/old/jaeger-operator.yaml delete mode 100644 attic/old/loki.yaml delete mode 100644 attic/old/opentelemetry-collector.yaml delete mode 100644 attic/old/tempo.yaml delete mode 100644 attic/policy.hujson delete mode 100644 attic/templates/actions-runner-controller.yaml delete mode 100644 attic/templates/argo-rollouts.yaml delete mode 100644 attic/templates/argo-workflows.yaml delete mode 100644 attic/templates/argocd-apps.yaml delete mode 100644 attic/templates/busynix.yaml delete mode 100644 attic/templates/cert-manager.yaml delete mode 100644 attic/templates/chartmuseum.yaml delete mode 100644 attic/templates/clickhouse.yaml delete mode 100644 attic/templates/dapr.yaml delete mode 100644 attic/templates/dex.yaml delete mode 100644 attic/templates/downscaler.yaml delete mode 100644 attic/templates/geoserver.yaml delete mode 100644 attic/templates/gitlab-runner.yaml delete mode 100644 attic/templates/headscale.yaml delete mode 100644 attic/templates/ingress-nginx.yaml delete mode 100644 attic/templates/jaeger-operator.yaml delete mode 100644 attic/templates/keycloak.yaml delete mode 100644 attic/templates/kubernetes-dashboard.yaml delete mode 100644 attic/templates/kyverno.yaml delete mode 100644 attic/templates/linkerd-crds.yaml delete mode 100644 attic/templates/linkerd-multicluster.yaml delete mode 100644 attic/templates/linkerd.yaml delete mode 100644 attic/templates/loki.yaml delete mode 100644 attic/templates/mariadb-operator.yaml delete mode 100644 attic/templates/metricserver.yaml delete mode 100644 attic/templates/nfs-provisioner.yaml delete mode 100644 attic/templates/oncall.yaml delete mode 100644 attic/templates/openfga.yaml delete mode 100644 attic/templates/osm-tile-server.yaml delete mode 100644 attic/templates/otel-collector.yaml delete mode 100644 attic/templates/plausible.yaml delete mode 100644 attic/templates/policies/cnpg-add-backup-section.yaml delete mode 100644 attic/templates/policies/cnpg-clone-secrets.yaml delete mode 100644 attic/templates/policies/generate-external-admin-rolebinding.yaml delete mode 100644 attic/templates/policies/prometheus-add-folder-to-default-dashboards.yaml delete mode 100644 attic/templates/policies/sync-gitlab.yaml delete mode 100644 attic/templates/policies/sync-regcred.yaml delete mode 100644 attic/templates/policies/sync-s3-secret.yaml delete mode 100644 attic/templates/policies/whitelist-internal-ingresses.yaml delete mode 100644 attic/templates/postgres-operator.yaml delete mode 100644 attic/templates/prometheus-thanos.yaml delete mode 100644 attic/templates/prometheus.yaml delete mode 100644 attic/templates/promtail.yaml delete mode 100644 attic/templates/rabbitmq-operator.yaml delete mode 100644 attic/templates/rabbitmq.yaml delete mode 100644 attic/templates/redis.yaml delete mode 100644 attic/templates/resources/cluster-auth-rbac.yaml delete mode 100644 attic/templates/resources/dashboards/argocd.yaml delete mode 100644 attic/templates/resources/dashboards/cnpg-postgres.yaml delete mode 100644 attic/templates/resources/dashboards/dotdc-grafana-dashboards-kubernetes.yaml delete mode 100644 attic/templates/resources/dashboards/gitlab-runner.yaml delete mode 100644 attic/templates/resources/dashboards/persistent-volume-usage.yaml delete mode 100644 attic/templates/resources/dashboards/rabbitmq.yaml delete mode 100644 attic/templates/resources/dashboards/velero.yaml delete mode 100644 attic/templates/resources/dashboards/x509-exporter-dashbaoard.yaml delete mode 100644 attic/templates/resources/external-clusterrole.yaml delete mode 100644 attic/templates/resources/external-clusterrolebinding.yaml delete mode 100644 attic/templates/resources/kube-flannel-rbac.yaml delete mode 100644 attic/templates/resources/kube-proxy-rbac.yaml delete mode 100644 attic/templates/resources/kyverno-cluster-admin.yaml delete mode 100644 attic/templates/resources/kyverno-generate-cilium-network-policies.yaml delete mode 100644 attic/templates/resources/label-and-taint-nodes.yaml delete mode 100644 attic/templates/resources/operator-role.yaml delete mode 100644 attic/templates/resources/pre-cert-manager.yaml delete mode 100644 attic/templates/resources/pre-gitlab-runner.yaml delete mode 100644 attic/templates/resources/pre-linkerd.yaml delete mode 100644 attic/templates/resources/x509-certificates.yaml delete mode 100644 attic/templates/seq.yaml delete mode 100644 attic/templates/sorcerer.yaml delete mode 100644 attic/templates/tempo.yaml delete mode 100644 attic/templates/velero.yaml delete mode 100644 attic/templates/wordpress.yaml delete mode 100644 attic/templates/x509-exporter.yaml delete mode 100644 attic/templates/yolo-dl.yaml delete mode 100644 attic/templates/yolo-registry.yaml delete mode 100644 attic/values.yaml delete mode 100644 attic/values/archmeister/base/deployment_patch.yaml delete mode 100644 attic/values/archmeister/base/kustomization.yaml delete mode 100644 attic/values/archmeister/chart delete mode 100644 attic/values/archmeister/prod/appsettings.json delete mode 100644 attic/values/archmeister/prod/default.env delete mode 100644 attic/values/archmeister/prod/deployment_patch.yaml delete mode 100644 attic/values/archmeister/prod/ingress_patch.yaml delete mode 100644 attic/values/archmeister/prod/kustomization.yaml delete mode 100644 attic/values/archmeister/staging/appsettings.json delete mode 100644 attic/values/archmeister/staging/default.env delete mode 100644 attic/values/archmeister/staging/deployment_patch.yaml delete mode 100644 attic/values/archmeister/staging/ingress_patch.yaml delete mode 100644 attic/values/archmeister/staging/kustomization.yaml delete mode 100644 attic/values/archmeister/values-prod.yaml delete mode 100644 attic/values/archmeister/values-staging.yaml delete mode 100644 attic/values/cerbos/manifests/cerbos-gitlab-token.yaml delete mode 100644 attic/values/cerbos/values-prod.yaml delete mode 100644 attic/values/cerbos/values-staging.yaml delete mode 100644 attic/values/cerbos/values.yaml delete mode 100644 attic/values/dex/resources/dex-volumes.yaml delete mode 100644 attic/values/dex/templates/.config/dotnet-tools.json delete mode 100644 attic/values/dex/templates/.gitignore delete mode 100644 attic/values/dex/templates/.vscode/launch.json delete mode 100644 attic/values/dex/templates/.vscode/settings.json delete mode 100644 attic/values/dex/templates/DexTemplates.sln delete mode 100644 attic/values/dex/templates/README.md delete mode 100755 attic/values/dex/templates/deploy.sh delete mode 100644 attic/values/dex/templates/dex/static/img/atlassian-crowd-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/bitbucket-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/email-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/gitea-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/github-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/gitlab-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/google-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/keystone-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/ldap-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/linkedin-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/microsoft-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/ob.png delete mode 100644 attic/values/dex/templates/dex/static/img/oidc-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/img/saml-icon.svg delete mode 100644 attic/values/dex/templates/dex/static/js/index.c3f9eb2e.js delete mode 100644 attic/values/dex/templates/dex/static/js/vendor.86e21c29.js delete mode 100644 attic/values/dex/templates/dex/static/logout.html delete mode 100644 attic/values/dex/templates/dex/static/main.css delete mode 100644 attic/values/dex/templates/dex/templates/approval.html delete mode 100644 attic/values/dex/templates/dex/templates/device.html delete mode 100644 attic/values/dex/templates/dex/templates/device_success.html delete mode 100644 attic/values/dex/templates/dex/templates/error.html delete mode 100644 attic/values/dex/templates/dex/templates/footer.html delete mode 100644 attic/values/dex/templates/dex/templates/header.html delete mode 100644 attic/values/dex/templates/dex/templates/login.html delete mode 100644 attic/values/dex/templates/dex/templates/oob.html delete mode 100644 attic/values/dex/templates/dex/templates/password.html delete mode 100644 attic/values/dex/templates/dex/themes/dark/favicon.png delete mode 100644 attic/values/dex/templates/dex/themes/dark/logo.png delete mode 100644 attic/values/dex/templates/dex/themes/dark/styles.css delete mode 100644 attic/values/dex/templates/dex/themes/light/favicon.png delete mode 100644 attic/values/dex/templates/dex/themes/light/logo.png delete mode 100644 attic/values/dex/templates/dex/themes/light/styles.css delete mode 100644 attic/values/dex/templates/index.html delete mode 100644 attic/values/dex/templates/package-lock.json delete mode 100644 attic/values/dex/templates/package.json delete mode 100644 attic/values/dex/templates/src/App.fs delete mode 100644 attic/values/dex/templates/src/DexTemplates.fsproj delete mode 100644 attic/values/dex/values-prod.yaml delete mode 100644 attic/values/dex/values-staging.yaml delete mode 100644 attic/values/dex/values.yaml delete mode 100644 attic/values/hipster/base/deployment_patch.yaml delete mode 100644 attic/values/hipster/base/kustomization.yaml delete mode 100644 attic/values/hipster/base/service_patch.yaml delete mode 100644 attic/values/hipster/chart delete mode 100644 attic/values/hipster/prod/appsettings.json delete mode 100644 attic/values/hipster/prod/bindings.yaml delete mode 100644 attic/values/hipster/prod/default.env delete mode 100644 attic/values/hipster/prod/deployment_patch.yaml delete mode 100644 attic/values/hipster/prod/kustomization.yaml delete mode 100644 attic/values/hipster/staging/appsettings.json delete mode 100644 attic/values/hipster/staging/bindings.yaml delete mode 100644 attic/values/hipster/staging/default.env delete mode 100644 attic/values/hipster/staging/deployment_patch.yaml delete mode 100644 attic/values/hipster/staging/kustomization.yaml delete mode 100644 attic/values/hipster/values-prod.yaml delete mode 100644 attic/values/hipster/values-staging.yaml delete mode 100644 attic/values/jaeger/values.yaml delete mode 100644 attic/values/petimeter/base/deployment_patch.yaml delete mode 100644 attic/values/petimeter/base/kustomization.yaml delete mode 100644 attic/values/petimeter/chart delete mode 100644 attic/values/petimeter/prod/appsettings.json delete mode 100644 attic/values/petimeter/prod/default.env delete mode 100644 attic/values/petimeter/prod/deployment_patch.yaml delete mode 100644 attic/values/petimeter/prod/kustomization.yaml delete mode 100644 attic/values/petimeter/staging/appsettings.json delete mode 100644 attic/values/petimeter/staging/default.env delete mode 100644 attic/values/petimeter/staging/deployment_patch.yaml delete mode 100644 attic/values/petimeter/staging/kustomization.yaml delete mode 100644 attic/values/petimeter/values-prod.yaml delete mode 100644 attic/values/petimeter/values-staging.yaml delete mode 100644 attic/values/seq/values.yaml diff --git a/attic/.helmignore b/attic/.helmignore deleted file mode 100644 index a03bb3bc..00000000 --- a/attic/.helmignore +++ /dev/null @@ -1,26 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -*.nix -old/ -nix/ diff --git a/attic/Chart.yaml b/attic/Chart.yaml deleted file mode 100644 index 142f6713..00000000 --- a/attic/Chart.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: v2 -name: sys -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" -dependencies: # A list of the chart requirements (optional) - - name: sys-cilium-policies - condition: cilium.enabled diff --git a/attic/charts/cilium/.helmignore b/attic/charts/cilium/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/attic/charts/cilium/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/attic/charts/cilium/Chart.yaml b/attic/charts/cilium/Chart.yaml deleted file mode 100644 index 68b10e69..00000000 --- a/attic/charts/cilium/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: cilium -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml deleted file mode 100644 index 1678e7a3..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-applicationset-ingress - namespace: argocd -spec: - description: Allow access from the ingress controller - endpointSelector: - matchLabels: - app.kubernetes.io/component: applicationset-controller - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml deleted file mode 100644 index 045dbc56..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-notifications - namespace: argocd -spec: - description: Allow access to the ArgoCD Notifications - egress: - - toFQDNs: - - matchName: slack.com - endpointSelector: - matchLabels: - app.kubernetes.io/component: notifications-controller diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml deleted file mode 100644 index 0af071b5..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-repo-access-applicationset - namespace: argocd -spec: - description: Allow access to the ArgoCD repo Applicationset - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/component: applicationset-controller diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml deleted file mode 100644 index 6e2b7e04..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-repo-access - namespace: argocd -spec: - description: Allow access to the ArgoCD repo server - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/component: repo-server diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml deleted file mode 100644 index 5f030377..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-chartmuseum-ingress - namespace: argocd -spec: - description: Allow access to the chartmuseum ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: chartmuseum - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml deleted file mode 100644 index 1534b3c8..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-image-updater-repo-access - namespace: argocd -spec: - description: Allow argoCD image updater to access github container registry - egress: - - toFQDNs: - - matchName: ghcr.io - endpointSelector: - matchLabels: - app.kubernetes.io/name: argocd-image-updater diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml deleted file mode 100644 index 2096eaae..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-ingress - namespace: argocd -spec: - description: Allow access from the ingress controller - endpointSelector: - matchLabels: - app.kubernetes.io/component: server - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 40045bb8..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: argocd -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml deleted file mode 100644 index e68b04d2..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-microsoft-sso - namespace: argocd -spec: - description: Allow argoCD dex server to authenticate to microsoft online azure oatuh - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: github.com - - matchName: api.github.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml deleted file mode 100644 index ebfed5bd..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics-rollout - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argo-rollouts - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8090" - protocol: TCP diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml deleted file mode 100644 index f8f81286..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics-workflows - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argo-workflows - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "9090" - protocol: TCP diff --git a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index a1b0f86f..00000000 --- a/attic/charts/cilium/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argocd - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8082" - protocol: TCP - - port: "8080" - protocol: TCP - - port: "9001" - protocol: TCP - - port: "9121" - protocol: TCP - - port: "8084" - protocol: TCP - - port: "8083" - protocol: TCP - - port: "5558" - protocol: TCP diff --git a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server-to-cert-manager.yaml b/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server-to-cert-manager.yaml deleted file mode 100644 index 7ff9859e..00000000 --- a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server-to-cert-manager.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server-to-cert-manager - namespace: cert-manager -spec: - description: Allow the API server to communicate with the cert-manager pods - endpointSelector: - matchLabels: - app.kubernetes.io/instance: cert-manager - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 49e026d4..00000000 --- a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: cert-manager -spec: - description: Allow the Kube API server to communicate with cert-manager - egress: - - toEntities: - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index d64ede50..00000000 --- a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: cert-manager -spec: - description: Allow Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: cert-manager - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9402" - protocol: TCP diff --git a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-world-traffic.yaml b/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-world-traffic.yaml deleted file mode 100644 index a3d26127..00000000 --- a/attic/charts/cilium/templates/cert-manager/CiliumNetworkPolicy-allow-world-traffic.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-world-traffic - namespace: cert-manager -spec: - description: Allow the world to communicate with cert-manager - egress: - - toEntities: - - world - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index ca0bd2c4..00000000 --- a/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: cilium-spire -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-remote-node-to-server.yaml b/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-remote-node-to-server.yaml deleted file mode 100644 index 013a84f9..00000000 --- a/attic/charts/cilium/templates/cilium-spire/CiliumNetworkPolicy-allow-remote-node-to-server.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-server - namespace: cilium-spire -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - remote-node - toPorts: - - ports: - - port: "8081" - protocol: TCP diff --git a/attic/charts/cilium/templates/cilium-test/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/cilium-test/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 28045ea2..00000000 --- a/attic/charts/cilium/templates/cilium-test/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: cilium-test -spec: - egress: - - toEndpoints: - - {} - - toEntities: - - cluster - - toEntities: - - remote-node - - toEntities: - - world - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - cluster - - fromEntities: - - world diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml deleted file mode 100644 index 214dade6..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-acme-solvers -spec: - description: Policy for ingress for Acme Solvers. - endpointSelector: - matchLabels: - acme.cert-manager.io/http01-solver: "true" - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-dns.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-dns.yaml deleted file mode 100644 index 0a7f77b3..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-dns.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-dns -spec: - description: 'description: Allow only dns traffic by default. Also acts as a deny-all policy' - egress: - - toEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: kube-system - k8s-app: kube-dns - toPorts: - - ports: - - port: "53" - protocol: UDP - - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: NotIn - values: - - kube-system diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml deleted file mode 100644 index a0a41bcc..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-mariadb-operator -spec: - description: allow mariadb instances to be reached by operator - endpointSelector: - matchLabels: - app.kubernetes.io/name: mariadb - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/name: mariadb-operator - io.kubernetes.pod.namespace: mariadb-operator - toPorts: - - ports: - - port: "3306" - protocol: TCP diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-s3.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-s3.yaml deleted file mode 100644 index 43fed561..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-allow-s3.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-s3-traffic -spec: - description: Policy for egress for CNPG Backups. - egress: - - toFQDNs: - {{- range .Values.s3.hosts }} - - matchName: {{ . | quote }} - {{- end }} - {{- range .Values.s3.patterns }} - - matchPattern: {{ . | quote }} - {{- end }} - - toCIDR: - {{- range .Values.s3.cidr }} - - {{ . | quote }} - {{- end }} - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-cilium-health-checks.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-cilium-health-checks.yaml deleted file mode 100644 index 9fc9bb26..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-cilium-health-checks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: cilium-health-checks -spec: - description: Health checks - egress: - - toEntities: - - remote-node - endpointSelector: - matchLabels: - reserved:health: "" - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-deny-all.yaml b/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-deny-all.yaml deleted file mode 100644 index 7ba45d08..00000000 --- a/attic/charts/cilium/templates/clusterwide/CiliumClusterwideNetworkPolicy-deny-all.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: deny-all -spec: - description: Deny all - egress: [] - endpointSelector: {} - ingress: [] diff --git a/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index d32ac553..00000000 --- a/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: cnpg -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: postgres-operator diff --git a/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 6c04cc22..00000000 --- a/attic/charts/cilium/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: cnpg -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 7c7345ec..00000000 --- a/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kube-downscaler -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - application: downscaler-py-kube-downscaler diff --git a/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index e99b9eec..00000000 --- a/attic/charts/cilium/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: kube-downscaler -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 4ffbbd8c..00000000 --- a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: ingress-nginx -spec: - egress: - - toEntities: - - kube-apiserver - - host - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml b/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml deleted file mode 100644 index fa9ee953..00000000 --- a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-traffic - namespace: ingress-nginx -spec: - egress: - - toFQDNs: - - matchPattern: hubble.*.*.* - - matchPattern: hubble.*.*.*.* - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 98bbc402..00000000 --- a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: ingress-nginx -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: ingress-nginx - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9913" - protocol: TCP diff --git a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml b/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml deleted file mode 100644 index b3bcc3d3..00000000 --- a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-traffic - namespace: ingress-nginx -spec: - egress: - - toCIDR: - - 10.139.2.10/32 - - toCIDR: - - 10.139.2.11/32 - - toCIDR: - - 10.139.2.20/32 - - toCIDR: - - 10.139.2.21/32 - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml b/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml deleted file mode 100644 index 4ecbe4fa..00000000 --- a/attic/charts/cilium/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-world-to-ingress-nginx - namespace: ingress-nginx -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx - ingress: - - fromEntities: - - world - - toPorts: - - ports: - - port: "80" - protocol: TCP - - port: "443" - protocol: TCP diff --git a/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 29cd1826..00000000 --- a/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: jaeger -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml b/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml deleted file mode 100644 index 3d1bddcd..00000000 --- a/attic/charts/cilium/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-jaeger - namespace: jaeger -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: jaeger-operator - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 1e35e6ad..00000000 --- a/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kafka -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kafka-operator diff --git a/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index cbf9ee6b..00000000 --- a/attic/charts/cilium/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: kafka -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml deleted file mode 100644 index 31b7dacc..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-controller-metrics - namespace: kube-system -spec: - description: Allow Controller Metrics - endpointSelector: - matchLabels: - k8s-app: kube-controller-manager - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "10257" - protocol: TCP diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml deleted file mode 100644 index 9e8e47fe..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-csi-webhook - namespace: kube-system -spec: - endpointSelector: - matchLabels: - app: csi-snapshot-webhook - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml deleted file mode 100644 index b4c33ac7..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-metrics - namespace: kube-system -spec: - description: Allow DNS metrics - endpointSelector: - matchLabels: - k8s-app: kube-dns - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9153" - protocol: TCP diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml deleted file mode 100644 index b69f15f6..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-world - namespace: kube-system -spec: - description: Allow DNS World - egress: - - toCIDR: - - 8.8.8.8/32 - - 172.31.254.11/32 - - 1.1.1.1/32 - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - - toEntities: - - world - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchLabels: - k8s-app: kube-dns diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml deleted file mode 100644 index 7d19e1de..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns - namespace: kube-system -spec: - description: Allow DNS - endpointSelector: - matchLabels: - k8s-app: kube-dns - ingress: - - fromEndpoints: - - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: Exists - toPorts: - - ports: - - port: "53" - protocol: UDP diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 08710d89..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: kube-system -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml deleted file mode 100644 index ec1c6cf8..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-ingress - namespace: kube-system -spec: - description: Allow Hubble ingress - endpointSelector: - matchLabels: - k8s-app: hubble-ui - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml deleted file mode 100644 index 7e31779e..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-oauth2-ingress - namespace: kube-system -spec: - description: Allow Hubble OAuth2 ingress - endpointSelector: - matchLabels: - k8s-app: oauth2-proxy - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml deleted file mode 100644 index 676dddde..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-relay-metrics - namespace: kube-system -spec: - description: Allow Hubble Relay Metrics - endpointSelector: - matchLabels: - k8s-app: hubble-relay - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9966" - protocol: TCP diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml deleted file mode 100644 index 71769867..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-microsoft-sso - namespace: kube-system -spec: - description: Allow Microsoft SSO - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: graph.microsoft.com - endpointSelector: - matchLabels: - k8s-app: oauth2-proxy diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml deleted file mode 100644 index 9b20afc2..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-namespace-traffic - namespace: kube-system -spec: - description: Allow Namespace Traffic - egress: - - toEndpoints: - - {} - - toEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: kube-system - k8s-app: kube-dns - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchLabels: {} - ingress: - - fromEndpoints: - - {} diff --git a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml b/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml deleted file mode 100644 index 0d99e202..00000000 --- a/attic/charts/cilium/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-proxy-metrics - namespace: kube-system -spec: - description: Allow Proxy metrics - endpointSelector: - matchLabels: - k8s-app: kube-proxy - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "10249" - protocol: TCP diff --git a/attic/charts/cilium/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 59732e3a..00000000 --- a/attic/charts/cilium/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: kubelet-serving-cert-approver -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index d52ee5c9..00000000 --- a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kyverno -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index f547d4a5..00000000 --- a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: kyverno -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kyverno - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "8000" - protocol: TCP diff --git a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml b/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml deleted file mode 100644 index 5087fa86..00000000 --- a/attic/charts/cilium/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-kyverno - namespace: kyverno -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kyverno - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml b/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml deleted file mode 100644 index 7e43aeb7..00000000 --- a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-loki-backend-to-api-server - namespace: loki -spec: - description: Promtail needs to reach kube-apiserver - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/component: backend - app.kubernetes.io/instance: loki diff --git a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index e3161e8b..00000000 --- a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: loki -spec: - description: Allow Prometheus read and write - endpointSelector: - matchLabels: - app.kubernetes.io/instance: loki - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "3100" - protocol: TCP - - port: "3500" - protocol: TCP diff --git a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml b/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml deleted file mode 100644 index 5d7cd58a..00000000 --- a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-promtail-to-api-server - namespace: loki -spec: - description: Promtail needs to reach kube-apiserver - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: promtail diff --git a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml b/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml deleted file mode 100644 index 47a8be11..00000000 --- a/attic/charts/cilium/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-stats-grafana - namespace: loki -spec: - description: Allow stats - egress: - - toFQDNs: - - matchName: stats.grafana.org - endpointSelector: - matchLabels: - app.kubernetes.io/instance: loki diff --git a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index f90d4d76..00000000 --- a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: mariadb-operator -spec: - egress: - - toEntities: - - kube-apiserver - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator diff --git a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml b/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml deleted file mode 100644 index 5da9d113..00000000 --- a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-to-mariadb - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator - ingress: - - fromEntities: - - host diff --git a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 726e1b72..00000000 --- a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8080" - protocol: TCP diff --git a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 43e812ad..00000000 --- a/attic/charts/cilium/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - remote-node - toPorts: - - ports: - - port: "443" - protocol: TCP - - port: "9443" - protocol: TCP diff --git a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 7d296c8e..00000000 --- a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: mayastor -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml b/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml deleted file mode 100644 index 00e783d1..00000000 --- a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-agent-core - namespace: mayastor -spec: - description: Allow Remote to Agent Core - endpointSelector: - matchLabels: - app: agent-core - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml b/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml deleted file mode 100644 index 10464d0e..00000000 --- a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-etcd - namespace: mayastor -spec: - description: Allow Remote to Etcd - endpointSelector: - matchLabels: - app.kubernetes.io/name: etcd - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml b/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml deleted file mode 100644 index 1de55fac..00000000 --- a/attic/charts/cilium/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-maya - namespace: mayastor -spec: - description: Allow Remote to Mayastor - endpointSelector: - matchLabels: - app: api-rest - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 6c53acf9..00000000 --- a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-kube-api -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app: minio diff --git a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml b/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml deleted file mode 100644 index f5ad26b5..00000000 --- a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-minio-operator -spec: - description: Allow access to the Kube API server - endpointSelector: - matchLabels: - app: minio - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: minio-operator - toPorts: - - ports: - - port: "9000" - protocol: TCP diff --git a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml b/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml deleted file mode 100644 index 83985384..00000000 --- a/attic/charts/cilium/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-nodeport-ingress -spec: - description: Allow access to the Kube API server - endpointSelector: - matchLabels: - app: minio - ingress: - - fromEntities: - - world - toPorts: - - ports: - - port: "9000" - protocol: TCP diff --git a/attic/charts/cilium/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 83a6d612..00000000 --- a/attic/charts/cilium/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: minio-operator -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index cb20793f..00000000 --- a/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: odigos-system -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml b/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml deleted file mode 100644 index f1b59b9e..00000000 --- a/attic/charts/cilium/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-port-4317 - namespace: odigos-system -spec: - egress: - - toPorts: - - ports: - - port: "4317" - protocol: TCP - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 23c8a706..00000000 --- a/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: one-password -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: one-password-operator diff --git a/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 9a4a6c4b..00000000 --- a/attic/charts/cilium/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: one-password -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/cilium/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 99971950..00000000 --- a/attic/charts/cilium/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: opencost -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: opencost diff --git a/attic/charts/cilium/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml b/attic/charts/cilium/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml deleted file mode 100644 index 80f83639..00000000 --- a/attic/charts/cilium/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-otel-collector-loadbalancer-ingress - namespace: otel -spec: - description: Allow ingress from world - endpointSelector: - matchLabels: - app.kubernetes.io/name: opentelemetry-collector - ingress: - - fromEntities: - - world diff --git a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml b/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml deleted file mode 100644 index 0691f418..00000000 --- a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-mail-egress - namespace: postfix -spec: - description: Allow mailserver to send mails to world - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app: smtp-relay diff --git a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml b/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml deleted file mode 100644 index a8a2d699..00000000 --- a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-mail-ingress - namespace: postfix -spec: - description: Allow all services in cluster to send mail - endpointSelector: - matchLabels: - app: smtp-relay - ingress: - - fromEndpoints: - - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: Exists - toPorts: - - ports: - - port: "25" - protocol: TCP - - port: "587" - protocol: TCP diff --git a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 0bac3318..00000000 --- a/attic/charts/cilium/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: postfix -spec: - description: 'Allow prometheus metrics ' - endpointSelector: - matchLabels: - app: smtp-relay - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "9154" - protocol: TCP diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml deleted file mode 100644 index e092cb26..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-alerting - namespace: prometheus -spec: - description: Allow alerting - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/instance: prom-alertmanager diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml deleted file mode 100644 index b6f96e64..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-alertmanager-ingress - namespace: prometheus -spec: - description: Allow Nginx ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: alertmanager - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml deleted file mode 100644 index 0ee91e6e..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-metrics - namespace: prometheus -spec: - description: Allow DNS metrics - egress: - - toPorts: - - ports: - - port: "9153" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml deleted file mode 100644 index 90ac789e..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-etcd-metrics - namespace: prometheus -spec: - description: Allow ETCD metrics - egress: - - toPorts: - - ports: - - port: "2379" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml deleted file mode 100644 index fca3baf2..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-ingress - namespace: prometheus -spec: - description: Allow Grafana ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml deleted file mode 100644 index ed2084fe..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-oidc-login - namespace: prometheus -spec: - description: Allow Grafana OIDC login - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: api.github.com - - matchName: github.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml deleted file mode 100644 index 60721c6a..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-plugins - namespace: prometheus -spec: - description: Allow Grafana Plugins - egress: - - toFQDNs: - - matchName: grafana.com - - matchName: storage.googleapis.com - - matchName: raw.githubusercontent.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml deleted file mode 100644 index 453c2330..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-secure-gravatar - namespace: prometheus -spec: - description: Allow Grafana Secure Gravatar - egress: - - toFQDNs: - - matchName: secure.grafana.com - - matchName: secure.gravatar.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index bb3a591a..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: prometheus -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml deleted file mode 100644 index ac650e55..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-nginx-ingress - namespace: prometheus -spec: - description: Allow Nginx ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml deleted file mode 100644 index 4b7bd679..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-opencost-scrape - namespace: prometheus -spec: - description: Allow OpenCost scrape - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/name: opencost - io.kubernetes.pod.namespace: opencost - - toPorts: - - ports: - - port: "9090" - protocol: TCP diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml deleted file mode 100644 index 0603da13..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-metrics-server - namespace: prometheus -spec: - description: Allow Remote Metrics Server - endpointSelector: - matchLabels: - app.kubernetes.io/instance: metrics-server - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml deleted file mode 100644 index eeabfcbd..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-webhook - namespace: prometheus -spec: - description: Allow Remote Web Hook - endpointSelector: - matchLabels: - app: kube-prometheus-stack-operator - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml deleted file mode 100644 index c1856c3f..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-robusta-ingress - namespace: prometheus -spec: - description: Allow Robusta ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: prom-prometheus - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: robusta diff --git a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml b/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml deleted file mode 100644 index 5d1ed102..00000000 --- a/attic/charts/cilium/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-stats-grafana - namespace: prometheus -spec: - description: Allow stats - egress: - - toFQDNs: - - matchName: stats.grafana.org - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml b/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml deleted file mode 100644 index d06ad626..00000000 --- a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-inter-node-traffic - namespace: rabbitmq -spec: - description: Allow communication between nodes int the RabbitMQ cluster - egress: - - toEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq - toPorts: - - ports: - - port: "4369" - - endPort: 6500 - port: "6000" - - port: "25672" - - port: "35672" - - port: "35673" - - port: "35674" - - port: "35675" - - port: "35676" - - port: "35677" - - port: "35678" - - port: "35679" - - port: "35680" - - port: "35681" - - port: "35682" - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq - toPorts: - - ports: - - port: "4369" - - endPort: 6500 - port: "6000" - - port: "25672" - - port: "35672" - - port: "35673" - - port: "35674" - - port: "35675" - - port: "35676" - - port: "35677" - - port: "35678" - - port: "35679" - - port: "35680" - - port: "35681" - - port: "35682" diff --git a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml b/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml deleted file mode 100644 index b7deeb34..00000000 --- a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-operator-traffic - namespace: rabbitmq -spec: - description: Allow access to the RabbitMQ operator - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq-operator - toPorts: - - ports: - - port: "15672" - - port: "15671" diff --git a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml b/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml deleted file mode 100644 index f57cd209..00000000 --- a/attic/charts/cilium/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-rabbitmq-traffic - namespace: rabbitmq -spec: - description: Allow access to the RabbitMQ cluster - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - toPorts: - - ports: - - port: "5672" - - port: "5671" - - port: "5552" - - port: "5551" - - port: "15672" - - port: "15671" - - port: "61613" - - port: "61614" - - port: "1883" - - port: "8883" - - port: "15674" - - port: "15675" - - port: "15692" - - port: "15691" diff --git a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml b/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml deleted file mode 100644 index 5e8415c3..00000000 --- a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-ingress - namespace: robusta -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/component: server - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index f91eed07..00000000 --- a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: robusta -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml b/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml deleted file mode 100644 index c38a398a..00000000 --- a/attic/charts/cilium/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-slack - namespace: robusta -spec: - egress: - - toFQDNs: - - matchPattern: slack.com - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml b/attic/charts/cilium/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml deleted file mode 100644 index 960eac40..00000000 --- a/attic/charts/cilium/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-oceanbox-subnet - namespace: rook-ceph -spec: - description: Allow oceanbox traffic - egress: - - toCIDR: - - 10.255.241.0/24 - - toCIDR: - - 10.255.244.0/24 - endpointSelector: - matchLabels: {} - ingress: - - fromCIDR: - - 10.255.241.0/24 - - fromCIDR: - - 10.255.244.0/24 diff --git a/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml b/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml deleted file mode 100644 index cd00612d..00000000 --- a/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-internal - namespace: s3-sync -spec: - description: Allow s3 traffic internal - egress: - - toCIDR: - - 10.139.2.20/32 - - toCIDR: - - 10.139.2.21/32 - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml b/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml deleted file mode 100644 index 58b8e709..00000000 --- a/attic/charts/cilium/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-sync - namespace: s3-sync -spec: - description: Allow sync to safespring - egress: - - toFQDNs: - - matchName: s3.osl2.safedc.net - endpointSelector: - matchLabels: {} diff --git a/attic/charts/cilium/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/cilium/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index d56b8d90..00000000 --- a/attic/charts/cilium/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: sealed-secrets -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: sealed-secrets diff --git a/attic/charts/cilium/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index aa3ddd8c..00000000 --- a/attic/charts/cilium/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: tempo -spec: - egress: - - toPorts: - - ports: - - port: "7946" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: tempo diff --git a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index cb01381b..00000000 --- a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: velero -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: velero diff --git a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml b/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml deleted file mode 100644 index 21c8e2ff..00000000 --- a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-job-api-server - namespace: velero -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - batch.kubernetes.io/job-name: velero-upgrade-crds diff --git a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 1631d4bf..00000000 --- a/attic/charts/cilium/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: velero -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: velero - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "8085" - protocol: TCP diff --git a/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 7742a0fe..00000000 --- a/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: x509-exporter -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: x509-exporter diff --git a/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index cc040dd9..00000000 --- a/attic/charts/cilium/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: x509-exporter -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: x509-exporter - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9793" - protocol: TCP diff --git a/attic/charts/cilium/values.yaml b/attic/charts/cilium/values.yaml deleted file mode 100644 index 3964005c..00000000 --- a/attic/charts/cilium/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -s3: - hosts: - patterns: - cidr: - - 10.255.241.30/32 diff --git a/attic/charts/sys-cilium-policies/.helmignore b/attic/charts/sys-cilium-policies/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/attic/charts/sys-cilium-policies/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/attic/charts/sys-cilium-policies/Chart.yaml b/attic/charts/sys-cilium-policies/Chart.yaml deleted file mode 100644 index efa9ccd5..00000000 --- a/attic/charts/sys-cilium-policies/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: sys-cilium-policies -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml deleted file mode 100644 index 1678e7a3..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-applicationset-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-applicationset-ingress - namespace: argocd -spec: - description: Allow access from the ingress controller - endpointSelector: - matchLabels: - app.kubernetes.io/component: applicationset-controller - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml deleted file mode 100644 index 045dbc56..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-notifications.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-notifications - namespace: argocd -spec: - description: Allow access to the ArgoCD Notifications - egress: - - toFQDNs: - - matchName: slack.com - endpointSelector: - matchLabels: - app.kubernetes.io/component: notifications-controller diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml deleted file mode 100644 index 0af071b5..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access-applicationset.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-repo-access-applicationset - namespace: argocd -spec: - description: Allow access to the ArgoCD repo Applicationset - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/component: applicationset-controller diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml deleted file mode 100644 index 6e2b7e04..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-argo-repo-access.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-argo-repo-access - namespace: argocd -spec: - description: Allow access to the ArgoCD repo server - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/component: repo-server diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml deleted file mode 100644 index 5f030377..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-chartmuseum-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-chartmuseum-ingress - namespace: argocd -spec: - description: Allow access to the chartmuseum ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: chartmuseum - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml deleted file mode 100644 index 1534b3c8..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-image-updater-repo-access.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-image-updater-repo-access - namespace: argocd -spec: - description: Allow argoCD image updater to access github container registry - egress: - - toFQDNs: - - matchName: ghcr.io - endpointSelector: - matchLabels: - app.kubernetes.io/name: argocd-image-updater diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml deleted file mode 100644 index 2096eaae..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-ingress - namespace: argocd -spec: - description: Allow access from the ingress controller - endpointSelector: - matchLabels: - app.kubernetes.io/component: server - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 40045bb8..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: argocd -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml deleted file mode 100644 index e68b04d2..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-microsoft-sso.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-microsoft-sso - namespace: argocd -spec: - description: Allow argoCD dex server to authenticate to microsoft online azure oatuh - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: github.com - - matchName: api.github.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml deleted file mode 100644 index ebfed5bd..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-rollout.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics-rollout - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argo-rollouts - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8090" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml deleted file mode 100644 index f8f81286..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics-workflows.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics-workflows - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argo-workflows - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "9090" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index a1b0f86f..00000000 --- a/attic/charts/sys-cilium-policies/templates/argocd/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: argocd -spec: - description: Allow access to the Prometheus metrics - endpointSelector: - matchLabels: - app.kubernetes.io/instance: argocd - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8082" - protocol: TCP - - port: "8080" - protocol: TCP - - port: "9001" - protocol: TCP - - port: "9121" - protocol: TCP - - port: "8084" - protocol: TCP - - port: "8083" - protocol: TCP - - port: "5558" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml b/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml deleted file mode 100644 index 214dade6..00000000 --- a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-acme-solvers.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-acme-solvers -spec: - description: Policy for ingress for Acme Solvers. - endpointSelector: - matchLabels: - acme.cert-manager.io/http01-solver: "true" - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-dns.yaml b/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-dns.yaml deleted file mode 100644 index 0a7f77b3..00000000 --- a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-dns.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-dns -spec: - description: 'description: Allow only dns traffic by default. Also acts as a deny-all policy' - egress: - - toEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: kube-system - k8s-app: kube-dns - toPorts: - - ports: - - port: "53" - protocol: UDP - - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: NotIn - values: - - kube-system diff --git a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml b/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml deleted file mode 100644 index a0a41bcc..00000000 --- a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-allow-mariadb-operator.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-mariadb-operator -spec: - description: allow mariadb instances to be reached by operator - endpointSelector: - matchLabels: - app.kubernetes.io/name: mariadb - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/name: mariadb-operator - io.kubernetes.pod.namespace: mariadb-operator - toPorts: - - ports: - - port: "3306" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-deny-all.yaml b/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-deny-all.yaml deleted file mode 100644 index 7ba45d08..00000000 --- a/attic/charts/sys-cilium-policies/templates/cilium/CiliumClusterwideNetworkPolicy-deny-all.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: deny-all -spec: - description: Deny all - egress: [] - endpointSelector: {} - ingress: [] diff --git a/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index d32ac553..00000000 --- a/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: cnpg -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: postgres-operator diff --git a/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 6c04cc22..00000000 --- a/attic/charts/sys-cilium-policies/templates/cnpg/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: cnpg -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 7c7345ec..00000000 --- a/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kube-downscaler -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - application: downscaler-py-kube-downscaler diff --git a/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index e99b9eec..00000000 --- a/attic/charts/sys-cilium-policies/templates/downscaler/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: kube-downscaler -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 4ffbbd8c..00000000 --- a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: ingress-nginx -spec: - egress: - - toEntities: - - kube-apiserver - - host - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml b/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml deleted file mode 100644 index fa9ee953..00000000 --- a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-hubble-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-traffic - namespace: ingress-nginx -spec: - egress: - - toFQDNs: - - matchPattern: hubble.*.*.* - - matchPattern: hubble.*.*.*.* - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 98bbc402..00000000 --- a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: ingress-nginx -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: ingress-nginx - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9913" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml b/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml deleted file mode 100644 index b3bcc3d3..00000000 --- a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-s3-traffic.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-traffic - namespace: ingress-nginx -spec: - egress: - - toCIDR: - - 10.139.2.10/32 - - toCIDR: - - 10.139.2.11/32 - - toCIDR: - - 10.139.2.20/32 - - toCIDR: - - 10.139.2.21/32 - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml b/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml deleted file mode 100644 index 4ecbe4fa..00000000 --- a/attic/charts/sys-cilium-policies/templates/ingress-nginx/CiliumNetworkPolicy-allow-world-to-ingress-nginx.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-world-to-ingress-nginx - namespace: ingress-nginx -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: ingress-nginx - ingress: - - fromEntities: - - world - - toPorts: - - ports: - - port: "80" - protocol: TCP - - port: "443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 29cd1826..00000000 --- a/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: jaeger -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml b/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml deleted file mode 100644 index 3d1bddcd..00000000 --- a/attic/charts/sys-cilium-policies/templates/jaeger/CiliumNetworkPolicy-allow-remote-node-to-jaeger.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-jaeger - namespace: jaeger -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: jaeger-operator - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 1e35e6ad..00000000 --- a/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kafka -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kafka-operator diff --git a/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index cbf9ee6b..00000000 --- a/attic/charts/sys-cilium-policies/templates/kafka/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: kafka -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml deleted file mode 100644 index 31b7dacc..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-controller-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-controller-metrics - namespace: kube-system -spec: - description: Allow Controller Metrics - endpointSelector: - matchLabels: - k8s-app: kube-controller-manager - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "10257" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml deleted file mode 100644 index 9e8e47fe..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-csi-webhook.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-csi-webhook - namespace: kube-system -spec: - endpointSelector: - matchLabels: - app: csi-snapshot-webhook - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml deleted file mode 100644 index b4c33ac7..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-metrics - namespace: kube-system -spec: - description: Allow DNS metrics - endpointSelector: - matchLabels: - k8s-app: kube-dns - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9153" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml deleted file mode 100644 index b69f15f6..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns-world.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-world - namespace: kube-system -spec: - description: Allow DNS World - egress: - - toCIDR: - - 8.8.8.8/32 - - 172.31.254.11/32 - - 1.1.1.1/32 - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - - toEntities: - - world - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchLabels: - k8s-app: kube-dns diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml deleted file mode 100644 index 7d19e1de..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-dns.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns - namespace: kube-system -spec: - description: Allow DNS - endpointSelector: - matchLabels: - k8s-app: kube-dns - ingress: - - fromEndpoints: - - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: Exists - toPorts: - - ports: - - port: "53" - protocol: UDP diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 08710d89..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: kube-system -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml deleted file mode 100644 index ec1c6cf8..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-ingress - namespace: kube-system -spec: - description: Allow Hubble ingress - endpointSelector: - matchLabels: - k8s-app: hubble-ui - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml deleted file mode 100644 index 7e31779e..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-oauth2-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-oauth2-ingress - namespace: kube-system -spec: - description: Allow Hubble OAuth2 ingress - endpointSelector: - matchLabels: - k8s-app: oauth2-proxy - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml deleted file mode 100644 index 676dddde..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-hubble-relay-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-hubble-relay-metrics - namespace: kube-system -spec: - description: Allow Hubble Relay Metrics - endpointSelector: - matchLabels: - k8s-app: hubble-relay - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9966" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml deleted file mode 100644 index 71769867..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-microsoft-sso.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-microsoft-sso - namespace: kube-system -spec: - description: Allow Microsoft SSO - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: graph.microsoft.com - endpointSelector: - matchLabels: - k8s-app: oauth2-proxy diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml deleted file mode 100644 index 9b20afc2..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-namespace-traffic.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-namespace-traffic - namespace: kube-system -spec: - description: Allow Namespace Traffic - egress: - - toEndpoints: - - {} - - toEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: kube-system - k8s-app: kube-dns - toPorts: - - ports: - - port: "53" - protocol: UDP - rules: - dns: - - matchPattern: '*' - endpointSelector: - matchLabels: {} - ingress: - - fromEndpoints: - - {} diff --git a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml b/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml deleted file mode 100644 index 0d99e202..00000000 --- a/attic/charts/sys-cilium-policies/templates/kube-system/CiliumNetworkPolicy-allow-proxy-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-proxy-metrics - namespace: kube-system -spec: - description: Allow Proxy metrics - endpointSelector: - matchLabels: - k8s-app: kube-proxy - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "10249" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 59732e3a..00000000 --- a/attic/charts/sys-cilium-policies/templates/kubelet-serving/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: kubelet-serving-cert-approver -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index d52ee5c9..00000000 --- a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: kyverno -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index f547d4a5..00000000 --- a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: kyverno -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kyverno - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "8000" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml b/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml deleted file mode 100644 index 5087fa86..00000000 --- a/attic/charts/sys-cilium-policies/templates/kyverno/CiliumNetworkPolicy-allow-remote-node-to-kyverno.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-kyverno - namespace: kyverno -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: kyverno - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml b/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml deleted file mode 100644 index 7e43aeb7..00000000 --- a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-loki-backend-to-api-server.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-loki-backend-to-api-server - namespace: loki -spec: - description: Promtail needs to reach kube-apiserver - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/component: backend - app.kubernetes.io/instance: loki diff --git a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index e3161e8b..00000000 --- a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: loki -spec: - description: Allow Prometheus read and write - endpointSelector: - matchLabels: - app.kubernetes.io/instance: loki - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "3100" - protocol: TCP - - port: "3500" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml b/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml deleted file mode 100644 index 5d7cd58a..00000000 --- a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-promtail-to-api-server.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-promtail-to-api-server - namespace: loki -spec: - description: Promtail needs to reach kube-apiserver - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: promtail diff --git a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml b/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml deleted file mode 100644 index 47a8be11..00000000 --- a/attic/charts/sys-cilium-policies/templates/loki/CiliumNetworkPolicy-allow-stats-grafana.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-stats-grafana - namespace: loki -spec: - description: Allow stats - egress: - - toFQDNs: - - matchName: stats.grafana.org - endpointSelector: - matchLabels: - app.kubernetes.io/instance: loki diff --git a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index f90d4d76..00000000 --- a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: mariadb-operator -spec: - egress: - - toEntities: - - kube-apiserver - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator diff --git a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml b/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml deleted file mode 100644 index 5da9d113..00000000 --- a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-host-to-mariadb.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-to-mariadb - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator - ingress: - - fromEntities: - - host diff --git a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 726e1b72..00000000 --- a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: mariadb-operator - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "8080" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 43e812ad..00000000 --- a/attic/charts/sys-cilium-policies/templates/mariadb-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: mariadb-operator -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - remote-node - toPorts: - - ports: - - port: "443" - protocol: TCP - - port: "9443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index 7d296c8e..00000000 --- a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: mayastor -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml b/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml deleted file mode 100644 index 00e783d1..00000000 --- a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-agent-core.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-agent-core - namespace: mayastor -spec: - description: Allow Remote to Agent Core - endpointSelector: - matchLabels: - app: agent-core - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml b/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml deleted file mode 100644 index 10464d0e..00000000 --- a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-etcd.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-etcd - namespace: mayastor -spec: - description: Allow Remote to Etcd - endpointSelector: - matchLabels: - app.kubernetes.io/name: etcd - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml b/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml deleted file mode 100644 index 1de55fac..00000000 --- a/attic/charts/sys-cilium-policies/templates/mayastor/CiliumNetworkPolicy-allow-remote-node-to-maya.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-maya - namespace: mayastor -spec: - description: Allow Remote to Mayastor - endpointSelector: - matchLabels: - app: api-rest - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 6c53acf9..00000000 --- a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-kube-api -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app: minio diff --git a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml b/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml deleted file mode 100644 index f5ad26b5..00000000 --- a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-minio-operator.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-minio-operator -spec: - description: Allow access to the Kube API server - endpointSelector: - matchLabels: - app: minio - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: minio-operator - toPorts: - - ports: - - port: "9000" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml b/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml deleted file mode 100644 index 83985384..00000000 --- a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumClusterwideNetworkPolicy-allow-nodeport-ingress.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumClusterwideNetworkPolicy -metadata: - name: allow-nodeport-ingress -spec: - description: Allow access to the Kube API server - endpointSelector: - matchLabels: - app: minio - ingress: - - fromEntities: - - world - toPorts: - - ports: - - port: "9000" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 83a6d612..00000000 --- a/attic/charts/sys-cilium-policies/templates/minio-operator/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: minio-operator -spec: - description: Allow access to the Kube API server - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index cb20793f..00000000 --- a/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: odigos-system -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml b/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml deleted file mode 100644 index f1b59b9e..00000000 --- a/attic/charts/sys-cilium-policies/templates/odigos-system/CiliumNetworkPolicy-allow-port-4317.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-port-4317 - namespace: odigos-system -spec: - egress: - - toPorts: - - ports: - - port: "4317" - protocol: TCP - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 23c8a706..00000000 --- a/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: one-password -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: one-password-operator diff --git a/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml b/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml deleted file mode 100644 index 9a4a6c4b..00000000 --- a/attic/charts/sys-cilium-policies/templates/one-password-operator/CiliumNetworkPolicy-allow-remote-node-webhooks.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-webhooks - namespace: one-password -spec: - endpointSelector: - matchLabels: {} - ingress: - - fromEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "9443" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index 99971950..00000000 --- a/attic/charts/sys-cilium-policies/templates/opencost/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: opencost -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: opencost diff --git a/attic/charts/sys-cilium-policies/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml b/attic/charts/sys-cilium-policies/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml deleted file mode 100644 index 80f83639..00000000 --- a/attic/charts/sys-cilium-policies/templates/otel/CiliumNetworkPolicy-allow-otel-collector-loadbalancer-ingress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-otel-collector-loadbalancer-ingress - namespace: otel -spec: - description: Allow ingress from world - endpointSelector: - matchLabels: - app.kubernetes.io/name: opentelemetry-collector - ingress: - - fromEntities: - - world diff --git a/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-ext.yaml b/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-ext.yaml deleted file mode 100644 index 806e00dd..00000000 --- a/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-ext.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-plausible-secure-external - namespace: plausible -spec: - description: Allow Plausible External - egress: - - toFQDNs: - - matchName: data.iana.org - - matchName: raw.githubusercontent.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: plausible-analytics \ No newline at end of file diff --git a/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-gravatar.yaml b/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-gravatar.yaml deleted file mode 100644 index 645da60f..00000000 --- a/attic/charts/sys-cilium-policies/templates/plausible/CiliumNetworkPolicy-allow-gravatar.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-plausible-secure-gravatar - namespace: plausible -spec: - description: Allow Plausible Gravatar - egress: - - toFQDNs: - - matchName: secure.gravatar.com - - matchName: gravatar.com - - matchName: www.gravatar.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: plausible-analytics \ No newline at end of file diff --git a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml b/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml deleted file mode 100644 index 0691f418..00000000 --- a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-egress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-mail-egress - namespace: postfix -spec: - description: Allow mailserver to send mails to world - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app: smtp-relay diff --git a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml b/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml deleted file mode 100644 index a8a2d699..00000000 --- a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-mail-ingress.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-mail-ingress - namespace: postfix -spec: - description: Allow all services in cluster to send mail - endpointSelector: - matchLabels: - app: smtp-relay - ingress: - - fromEndpoints: - - matchExpressions: - - key: io.kubernetes.pod.namespace - operator: Exists - toPorts: - - ports: - - port: "25" - protocol: TCP - - port: "587" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 0bac3318..00000000 --- a/attic/charts/sys-cilium-policies/templates/postfix/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: postfix -spec: - description: 'Allow prometheus metrics ' - endpointSelector: - matchLabels: - app: smtp-relay - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - toPorts: - - ports: - - port: "9154" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml deleted file mode 100644 index e092cb26..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alerting.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-alerting - namespace: prometheus -spec: - description: Allow alerting - egress: - - toEntities: - - world - endpointSelector: - matchLabels: - app.kubernetes.io/instance: prom-alertmanager diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml deleted file mode 100644 index b6f96e64..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-alertmanager-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-alertmanager-ingress - namespace: prometheus -spec: - description: Allow Nginx ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: alertmanager - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml deleted file mode 100644 index 0ee91e6e..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-dns-metrics.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-dns-metrics - namespace: prometheus -spec: - description: Allow DNS metrics - egress: - - toPorts: - - ports: - - port: "9153" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml deleted file mode 100644 index 90ac789e..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-etcd-metrics.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-etcd-metrics - namespace: prometheus -spec: - description: Allow ETCD metrics - egress: - - toPorts: - - ports: - - port: "2379" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml deleted file mode 100644 index fca3baf2..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-ingress - namespace: prometheus -spec: - description: Allow Grafana ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml deleted file mode 100644 index ed2084fe..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-oidc-login.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-oidc-login - namespace: prometheus -spec: - description: Allow Grafana OIDC login - egress: - - toFQDNs: - - matchName: login.microsoftonline.com - - matchPattern: '*.microsoftonline.com' - - matchName: api.github.com - - matchName: github.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml deleted file mode 100644 index 60721c6a..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-plugins.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-plugins - namespace: prometheus -spec: - description: Allow Grafana Plugins - egress: - - toFQDNs: - - matchName: grafana.com - - matchName: storage.googleapis.com - - matchName: raw.githubusercontent.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml deleted file mode 100644 index 453c2330..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-grafana-secure-gravatar.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-grafana-secure-gravatar - namespace: prometheus -spec: - description: Allow Grafana Secure Gravatar - egress: - - toFQDNs: - - matchName: secure.grafana.com - - matchName: secure.gravatar.com - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml deleted file mode 100644 index bb3a591a..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-host-traffic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-host-traffic - namespace: prometheus -spec: - description: Allow Host Traffic - egress: - - toEntities: - - remote-node - - host - - kube-apiserver - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml deleted file mode 100644 index ac650e55..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-nginx-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-nginx-ingress - namespace: prometheus -spec: - description: Allow Nginx ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml deleted file mode 100644 index 4b7bd679..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-opencost-scrape.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-opencost-scrape - namespace: prometheus -spec: - description: Allow OpenCost scrape - endpointSelector: - matchLabels: - app.kubernetes.io/name: prometheus - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/name: opencost - io.kubernetes.pod.namespace: opencost - - toPorts: - - ports: - - port: "9090" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml deleted file mode 100644 index 0603da13..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-metrics-server.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-metrics-server - namespace: prometheus -spec: - description: Allow Remote Metrics Server - endpointSelector: - matchLabels: - app.kubernetes.io/instance: metrics-server - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml deleted file mode 100644 index eeabfcbd..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-remote-node-to-webhook.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-remote-node-to-webhook - namespace: prometheus -spec: - description: Allow Remote Web Hook - endpointSelector: - matchLabels: - app: kube-prometheus-stack-operator - ingress: - - fromEntities: - - remote-node diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml deleted file mode 100644 index c1856c3f..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-robusta-ingress.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-robusta-ingress - namespace: prometheus -spec: - description: Allow Robusta ingress - endpointSelector: - matchLabels: - app.kubernetes.io/name: prom-prometheus - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: robusta diff --git a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml b/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml deleted file mode 100644 index 5d1ed102..00000000 --- a/attic/charts/sys-cilium-policies/templates/prometheus/CiliumNetworkPolicy-allow-stats-grafana.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-stats-grafana - namespace: prometheus -spec: - description: Allow stats - egress: - - toFQDNs: - - matchName: stats.grafana.org - endpointSelector: - matchLabels: - app.kubernetes.io/name: grafana diff --git a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml b/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml deleted file mode 100644 index d06ad626..00000000 --- a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-inter-node-traffic.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-inter-node-traffic - namespace: rabbitmq -spec: - description: Allow communication between nodes int the RabbitMQ cluster - egress: - - toEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq - toPorts: - - ports: - - port: "4369" - - endPort: 6500 - port: "6000" - - port: "25672" - - port: "35672" - - port: "35673" - - port: "35674" - - port: "35675" - - port: "35676" - - port: "35677" - - port: "35678" - - port: "35679" - - port: "35680" - - port: "35681" - - port: "35682" - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq - toPorts: - - ports: - - port: "4369" - - endPort: 6500 - port: "6000" - - port: "25672" - - port: "35672" - - port: "35673" - - port: "35674" - - port: "35675" - - port: "35676" - - port: "35677" - - port: "35678" - - port: "35679" - - port: "35680" - - port: "35681" - - port: "35682" diff --git a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml b/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml deleted file mode 100644 index b7deeb34..00000000 --- a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-operator-traffic.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-operator-traffic - namespace: rabbitmq -spec: - description: Allow access to the RabbitMQ operator - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - fromEndpoints: - - matchLabels: - app.kubernetes.io/component: rabbitmq-operator - toPorts: - - ports: - - port: "15672" - - port: "15671" diff --git a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml b/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml deleted file mode 100644 index f57cd209..00000000 --- a/attic/charts/sys-cilium-policies/templates/rabbitmq/CiliumNetworkPolicy-allow-rabbitmq-traffic.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-rabbitmq-traffic - namespace: rabbitmq -spec: - description: Allow access to the RabbitMQ cluster - endpointSelector: - matchLabels: - app.kubernetes.io/component: rabbitmq - ingress: - - toPorts: - - ports: - - port: "5672" - - port: "5671" - - port: "5552" - - port: "5551" - - port: "15672" - - port: "15671" - - port: "61613" - - port: "61614" - - port: "1883" - - port: "8883" - - port: "15674" - - port: "15675" - - port: "15692" - - port: "15691" diff --git a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml b/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml deleted file mode 100644 index 5e8415c3..00000000 --- a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-ingress.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-ingress - namespace: robusta -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/component: server - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: ingress-nginx diff --git a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index f91eed07..00000000 --- a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: robusta -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml b/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml deleted file mode 100644 index 86f00f44..00000000 --- a/attic/charts/sys-cilium-policies/templates/robusta/CiliumNetworkPolicy-allow-slack.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-slack - namespace: prometheus -spec: - egress: - - toFQDNs: - - matchPattern: slack.com - - matchName: hooks.slack.com - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml b/attic/charts/sys-cilium-policies/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml deleted file mode 100644 index 960eac40..00000000 --- a/attic/charts/sys-cilium-policies/templates/rook-ceph/CiliumNetworkPolicy-allow-oceanbox-subnet.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-oceanbox-subnet - namespace: rook-ceph -spec: - description: Allow oceanbox traffic - egress: - - toCIDR: - - 10.255.241.0/24 - - toCIDR: - - 10.255.244.0/24 - endpointSelector: - matchLabels: {} - ingress: - - fromCIDR: - - 10.255.241.0/24 - - fromCIDR: - - 10.255.244.0/24 diff --git a/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml b/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml deleted file mode 100644 index cd00612d..00000000 --- a/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-internal.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-internal - namespace: s3-sync -spec: - description: Allow s3 traffic internal - egress: - - toCIDR: - - 10.139.2.20/32 - - toCIDR: - - 10.139.2.21/32 - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml b/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml deleted file mode 100644 index 58b8e709..00000000 --- a/attic/charts/sys-cilium-policies/templates/s3-sync/CiliumNetworkPolicy-allow-s3-sync.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-s3-sync - namespace: s3-sync -spec: - description: Allow sync to safespring - egress: - - toFQDNs: - - matchName: s3.osl2.safedc.net - endpointSelector: - matchLabels: {} diff --git a/attic/charts/sys-cilium-policies/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml b/attic/charts/sys-cilium-policies/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml deleted file mode 100644 index d56b8d90..00000000 --- a/attic/charts/sys-cilium-policies/templates/sealed-secrets/CiliumNetworkPolicy-allow-kube-api.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-kube-api - namespace: sealed-secrets -spec: - egress: - - toEntities: - - kube-apiserver - - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: sealed-secrets diff --git a/attic/charts/sys-cilium-policies/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index aa3ddd8c..00000000 --- a/attic/charts/sys-cilium-policies/templates/tempo/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: tempo -spec: - egress: - - toPorts: - - ports: - - port: "7946" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: tempo diff --git a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index cb01381b..00000000 --- a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: velero -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: velero diff --git a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml b/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml deleted file mode 100644 index 21c8e2ff..00000000 --- a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-job-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-job-api-server - namespace: velero -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - batch.kubernetes.io/job-name: velero-upgrade-crds diff --git a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index 1631d4bf..00000000 --- a/attic/charts/sys-cilium-policies/templates/velero/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: velero -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: velero - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "8085" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml b/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml deleted file mode 100644 index 7742a0fe..00000000 --- a/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-api-server.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-api-server - namespace: x509-exporter -spec: - egress: - - toEntities: - - kube-apiserver - toPorts: - - ports: - - port: "6443" - protocol: TCP - endpointSelector: - matchLabels: - app.kubernetes.io/instance: x509-exporter diff --git a/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml b/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml deleted file mode 100644 index cc040dd9..00000000 --- a/attic/charts/sys-cilium-policies/templates/x509-exporter/CiliumNetworkPolicy-allow-prometheus-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: allow-prometheus-metrics - namespace: x509-exporter -spec: - endpointSelector: - matchLabels: - app.kubernetes.io/instance: x509-exporter - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: prometheus - - toPorts: - - ports: - - port: "9793" - protocol: TCP diff --git a/attic/charts/sys-cilium-policies/values.yaml b/attic/charts/sys-cilium-policies/values.yaml deleted file mode 100644 index 3964005c..00000000 --- a/attic/charts/sys-cilium-policies/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -s3: - hosts: - patterns: - cidr: - - 10.255.241.30/32 diff --git a/attic/nix/atlantis.nix b/attic/nix/atlantis.nix deleted file mode 100644 index bff50005..00000000 --- a/attic/nix/atlantis.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.apps.atlantis; - env = config.apps.env; - - values = lib.apps.appValues { - inherit env; - base = ../values/atlantis; - extraValues = { }; - }; - - kustomize = - r: - if r.kind == "Deployment" then - lib.attrsets.recursiveUpdate r { - spec.template.spec.containers = builtins.map ( - x: - x - // { - livenessProbe.httpGet.path = "/healthz"; - readinessProble.httpGet.path = "/healthz"; - env = x.env ++ [ - { - name = "INERNAL_PORT"; - value = 8000; - } - ]; - } - ) r.spec.template.spec.containers; - } - else if r.kind == "Service" then - { } - else - r; -in -{ - options.apps.atlantis = lib.apps.appOptions { - revision = lib.mkOption { - type = lib.types.str; - default = "main"; - description = "Revision"; - }; - - hostname = lib.mkOption { - type = lib.types.str; - default = if env == "prod" then "maps.oceanbox.io" else "atlantis.beta.oceanbox.io"; - description = "Revision"; - }; - }; - - config = lib.apps.appConfig cfg "${env}-atlantis" { - helm.releases."${env}-atlantis" = { - inherit values; - chart = ../charts/atlantis; - transformer = rs: builtins.map (x: kustomize x) rs; - }; - }; -} diff --git a/attic/nix/default.nix b/attic/nix/default.nix deleted file mode 100644 index 6277483d..00000000 --- a/attic/nix/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - imports = [ - ./atlantis.nix - ./openfga.nix - ]; -} diff --git a/attic/nix/openfga.nix b/attic/nix/openfga.nix deleted file mode 100644 index 9145bfc7..00000000 --- a/attic/nix/openfga.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.apps.openfga; - env = config.apps.env; - - values = lib.apps.appValues { - inherit env; - base = ../values/openfga; - extraValues = { }; - }; - - kustomize = - r: if r.kind == "Job" then lib.attrsets.recursiveUpdate r { spec.backoffLimit = 2; } else r; - -in -{ - options.apps.openfga = lib.apps.appOptions { }; - - config = lib.apps.appConfig cfg "${env}-openfga" { - helm.releases."${env}-openfga" = { - inherit values; - chart = lib.helm.downloadHelmChart { - repo = "https://openfga.github.io/helm-charts"; - chart = "openfga"; - version = "0.2.12"; - chartHash = "sha256-7yLcw9/oNPvCePrtTJwKAG88t0Ym5Dl/S83Gz+gQdDU="; - }; - transformer = rs: builtins.map (x: kustomize x) rs; - }; - - annotations = { }; - resources = { - services.poop.spec = { - }; - }; - }; -} diff --git a/attic/old/jaeger-operator.yaml b/attic/old/jaeger-operator.yaml deleted file mode 100644 index 31848608..00000000 --- a/attic/old/jaeger-operator.yaml +++ /dev/null @@ -1,24 +0,0 @@ -{{- if .Values.jaeger-operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: jaeger - namespace: argocd -spec: - project: atlantis - destination: - server: https://kubernetes.default.svc - namespace: jaeger - sources: - - repoURL: https://jaegertracing.github.io/helm-charts - targetRevision: 2.54.0 - chart: jaeger-operator - helm: - valueFiles: - - $values/values/jaeger/values.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - # path: values/jaeger/manifests - ref: values - -{{- end }} diff --git a/attic/old/loki.yaml b/attic/old/loki.yaml deleted file mode 100644 index 2e46746d..00000000 --- a/attic/old/loki.yaml +++ /dev/null @@ -1,152 +0,0 @@ -{{- if .Values.loki.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: loki - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: loki - server: 'https://kubernetes.default.svc' - project: aux - ignoreDifferences: - - group: apps - kind: StatefulSet - jsonPointers: - - /spec/persistentVolumeClaimRetentionPolicy - syncPolicy: - managedNamespaceMetadata: - labels: - component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - path: policies/oceanbox/network/loki - targetRevision: HEAD - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: 6.12.0 - chart: loki - helm: - values: | - loki: - auth_enabled: false - storage: - bucketNames: - chunks: loki-chunks - ruler: loki-chunks - admin: loki-chunks - s3: - endpoint: http://10.255.241.30:30080 - region: tos - accessKeyId: ${S3KEY} - secretAccessKey: ${S3SECRET} - s3ForcePathStyle: true - http_config: - insecure_skip_verify: true - schemaConfig: - configs: - - from: "2024-04-01" - index: - period: 24h - prefix: loki_index_ - object_store: s3 - schema: v13 - store: tsdb - compactor: - compaction_interval: 10m - working_directory: /tmp/loki/compactor - retention_enabled: true - retention_delete_delay: 2h - retention_delete_worker_count: 150 - delete_request_store: s3 - limits_config: - retention_period: 744h - write: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_ID - - name: S3SECRET - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_SECRET - tolerations: - - effect: "NoSchedule" - operator: "Equal" - key: "unschedulable" - value: "true" - read: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_ID - - name: S3SECRET - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_SECRET - tolerations: - - effect: "NoSchedule" - operator: "Equal" - key: "unschedulable" - value: "true" - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: letsencrypt-staging - nginx.ingress.kubernetes.io/ssl-redirect: "true" - oceanbox.io/expose: internal - hosts: - - loki.adm.oceanbox.io - tls: - - hosts: - - loki.adm.oceanbox.io - secretName: loki-distributed-tls - compactor: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_ID - - name: S3SECRET - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_SECRET - backend: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_ID - - name: S3SECRET - valueFrom: - secretKeyRef: - name: loki-s3 - key: AWS_ACCESS_KEY_SECRET -{{- end }} diff --git a/attic/old/opentelemetry-collector.yaml b/attic/old/opentelemetry-collector.yaml deleted file mode 100644 index 1714c341..00000000 --- a/attic/old/opentelemetry-collector.yaml +++ /dev/null @@ -1,111 +0,0 @@ -{{- if .Values.opentelemetry-collector.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: opentelemetry-collector - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: otel - server: 'https://kubernetes.default.svc' - project: aux - syncPolicy: - # managedNamespaceMetadata: - # labels: - # component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: 'https://open-telemetry.github.io/opentelemetry-helm-charts' - targetRevision: 0.107.0 - chart: opentelemetry-collector - helm: - values: | - mode: deployment - image: - repository: otel/opentelemetry-collector-k8s - service: - type: LoadBalancer - loadBalancerIP: 10.255.241.12 - config: - receivers: - prometheus/collector: - config: - scrape_configs: - - job_name: 'opentelemetry-collector' - static_configs: - - targets: - - ${env:MY_POD_IP}:8888 - zipkin: - endpoint: ${env:MY_POD_IP}:9411 - exporters: - otlp: - endpoint: "tempo.tempo.svc:4317" - tls: - insecure: true - otlphttp/metrics: - endpoint: http://prom-prometheus.prometheus:9090/api/v1/otlp - tls: - insecure: true - otlphttp/logs: - endpoint: http://loki-write-headless.loki:3100/otlp - tls: - insecure: true - debug/metrics: - verbosity: detailed - debug/traces: - verbosity: detailed - debug/logs: - verbosity: detailed - service: - telemetry: - logs: - level: "info" - pipelines: - traces: - receivers: [otlp,zipkin] - processors: [batch] - exporters: [otlp] - # exporters: [otlphttp/traces,debug/traces] - metrics: - receivers: [otlp,prometheus/collector] - processors: [batch] - exporters: [otlphttp/metrics] - # exporters: [otlphttp/metrics,debug/metrics] - logs: - receivers: [otlp] - processors: [batch] - exporters: [otlphttp/logs] - # exporters: [otlphttp/logs,debug/logs] - ports: - metrics: - enabled: true - # presets: - # logsCollection: - # enabled: true - ingress: - enabled: false - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - nginx.ingress.kubernetes.io/ssl-redirect: "true" - oceanbox.io/expose: internal - ingressClassName: nginx - hosts: - - host: opentelemetry-collector.adm.oceanbox.io - paths: - - path: / - pathType: Prefix - port: 4318 - tls: - - secretName: collector-tls - hosts: - - opentelemetry-collector.adm.oceanbox.io -{{- end }} diff --git a/attic/old/tempo.yaml b/attic/old/tempo.yaml deleted file mode 100644 index 80e97ff9..00000000 --- a/attic/old/tempo.yaml +++ /dev/null @@ -1,78 +0,0 @@ -{{- if .Values.tempo.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: tempo - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: tempo - server: 'https://kubernetes.default.svc' - project: aux - syncPolicy: - # managedNamespaceMetadata: - # labels: - # component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: 1.10.3 - chart: tempo - helm: - values: | - tempo: - storage: - trace: - backend: s3 - s3: - bucket: tempo-traces - endpoint: 10.255.241.30:30080 - access_key: ${S3KEY} - secret_key: ${S3SECRET} - forcepathstyle: true - insecure: true - local: - path: /var/tempo/traces - wal: - path: /var/tempo/wal - metricsGenerator: - enabled: true - remoteWriteUrl: "http://prom-prometheus.prometheus:9090/api/v1/write" - extraArgs: { config.expand-env=true } - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: tempo-s3 - key: AWS_ACCESS_KEY_ID - - name: S3SECRET - valueFrom: - secretKeyRef: - name: tempo-s3 - key: AWS_ACCESS_KEY_SECRET - tempoQuery: - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: letsencrypt-staging - nginx.ingress.kubernetes.io/ssl-redirect: "true" - oceanbox.io/expose: internal - path: / - pathType: Prefix - hosts: - - query.tempo.adm.oceanbox.io - tls: - - secretName: tempo-query-tls - hosts: - - query.tempo.adm.oceanbox.io -{{- end }} diff --git a/attic/policy.hujson b/attic/policy.hujson deleted file mode 100644 index 7ebb297a..00000000 --- a/attic/policy.hujson +++ /dev/null @@ -1,148 +0,0 @@ -{ - // groups are collections of users having a common scope. A user can be in multiple groups - // groups cannot be composed of groups - "groups": { - "group:admin": [ - "jonas.juselius@oceanbox.io", - "Moritz.Jorg@oceanbox.io", - "simen.kirkvik@oceanbox.io", - "stig.r.jensen@oceanbox.io", - "system-tos", - ], - "group:devops": [ - "jonas.juselius@oceanbox.io", - "Moritz.Jorg@oceanbox.io", - "stig.r.jensen@oceanbox.io", - "radovan.bast@oceanbox.io", - "simen.kirkvik@oceanbox.io", - "Ole.Tytlandsvik@tromso.serit.no", - ], - "group:oceanographer": [ - "frank.gaardsted@oceanbox.io", - "ole.anders.nost@oceanbox.io", - "helge.avlesen@oceanbox.io", - "isa.rosso@oceanbox.io", - "jonathan.lilly@oceanbox.io", - ], - "group:manager": [ - "svenn.hanssen@oceanbox.io", - "hilde.iversen@oceanbox.io", - ], - "group:dev": [], - "group:intern": [], - }, - // tagOwners in tailscale is an association between a TAG and the people allowed to set this TAG on a server. - // This is documented [here](https://tailscale.com/kb/1068/acl-tags#defining-a-tag) - // and explained [here](https://tailscale.com/blog/rbac-like-it-was-meant-to-be/) - "tagOwners": { - "tag:k8s": [ "group:admin" ], - "tag:hpc": [ "group:admin" ], - }, - // hosts should be defined using its IP addresses and a subnet mask. - // to define a single host, use a /32 mask. You cannot use DNS entries here, - // as they're prone to be hijacked by replacing their IP addresses. - // see https://github.com/tailscale/tailscale/issues/3800 for more information. - "hosts": { - "ingress.ekman.tos": "10.255.241.99/32", - "ingress.ceph.tos": "10.255.241.10/32", - "ingress.ceph.vtn": "172.16.239.50/32", - "ingress.adm.ceph.vtn": "172.16.239.51/32", - "ingress.oceanbox.tos": "10.255.241.11/32", - "manage.ekman.tos": "10.255.241.99/32", - "k8s.oceanbox.tos": "10.255.241.200/32", - "k8s.ekman.tos": "10.255.241.99/32", - "k8s.ceph.tos": "10.255.241.29/32", - "printer.office.tos": "10.132.46.108/32", - "net.office.tos": "10.132.46.0/24", - "net.dc.tos": "10.255.241.0/24", - "net.100gbe.tos": "10.255.244.0/24", - "net.mgmt.tos": "10.255.240.0/24", - "net.dc.vtn": "172.16.239.0/24", - "net.mgmt.vtn": "172.16.238.0/24", - }, - "acls": [ - { - "action": "accept", - "src": [ - "group:admin", - "group:devops", - "group:oceanographer", - "group:manager", - "group:dev", - ], - "dst": [ - "100.64.0.0/24:0", - "100.64.0.0/24:22", - ] - }, - { - "action": "accept", - "src": [ "ekman", "net.dc.tos" ], - "dst": [ - "net.dc.vtn:*", - "100.64.0.0/24:0", - "100.64.0.0/24:22", - ] - }, - { - "action": "accept", - "src": [ "rossby", "net.dc.vtn" ], - "dst": [ - "net.dc.tos:*", - "100.64.0.0/24:0", - "100.64.0.0/24:22", - ] - }, - { - "action": "accept", - "src": [ "group:admin" ], - "dst": [ - "net.dc.tos:*", - "net.mgmt.tos:*", - "net.100gbe.tos:*", - "net.office.tos:*", - "net.dc.vtn:*", - "net.mgmt.vtn:*", - ] - }, - { - "action": "accept", - "src": [ "group:devops" ], - "dst": [ - "k8s.oceanbox.tos:6443", - "k8s.ekman.tos:4443", - ] - }, - { - "action": "accept", - "src": [ - "group:admin", - "group:devops", - "group:oceanographer", - "group:manager", - "group:dev", - ], - "dst": [ - "ingress.oceanbox.tos:443", - "ingress.ekman.tos:443", - "printer.office.tos:631", - "10.255.241.99/32:22", - "10.255.241.100/32:22", - ] - }, - { - "action": "accept", - "src": [ - "group:admin", - "group:devops", - "group:oceanographer", - "group:manager", - "group:dev", - ], - "dst": [ - "100.64.0.0/24:*", - "autogroup:internet:*", - ] - }, - ] -} diff --git a/attic/templates/actions-runner-controller.yaml b/attic/templates/actions-runner-controller.yaml deleted file mode 100644 index b3f34e57..00000000 --- a/attic/templates/actions-runner-controller.yaml +++ /dev/null @@ -1,42 +0,0 @@ -{{ if .Values.actions_runner_controller.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: actions-runner-controller - namespace: argocd #TODO move arc to isolated project -spec: - destination: - namespace: actions-runner-controller - server: 'https://kubernetes.default.svc' - sources: - - repoURL: 'https://actions-runner-controller.github.io/actions-runner-controller' - targetRevision: {{ .Values.actions_runner_controller.version }} - chart: actions-runner-controller - helm: - values: | - replicaCount: 1 - # Webhook - webhookPort: 9443 - syncPeriod: 1m - defaultScaleDownDelay: 10m - # Authentication - authSecret: - enabled: true - create: false - name: arc-gh-token - annotations: {} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - - ServerSideApply=true - {{- if .Values.actions_runner_controller.version }} - automated: - # selfHeal: false - prune: true - {{- end }} -{{ end }} diff --git a/attic/templates/argo-rollouts.yaml b/attic/templates/argo-rollouts.yaml deleted file mode 100644 index 136bced8..00000000 --- a/attic/templates/argo-rollouts.yaml +++ /dev/null @@ -1,37 +0,0 @@ -{{- if .Values.argo_rollouts.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: argo-rollouts - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "-1" -spec: - destination: - namespace: argocd - server: 'https://kubernetes.default.svc' - sources: - #- repoURL: {{ .Values.cluster_config.manifests }} - # path: {{ .Values.cluster_config.policies }}/argo-rollouts - # targetRevision: HEAD - - repoURL: 'https://argoproj.github.io/argo-helm' - targetRevision: {{ .Values.argo_rollouts.version }} - chart: argo-rollouts - helm: - values: | - dashboard: - enabled: {{ .Values.argo_rollouts.dashboard_enabled }} - {{- with .Values.argo_rollouts.metrics.enabled }} - controller: - metrics: - enabled: true - serviceMonitor: - enabled: true - {{- end }} - project: sys - {{- if .Values.argo_rollouts.autosync }} - syncPolicy: - automated: - prune: true - {{- end }} -{{- end }} diff --git a/attic/templates/argo-workflows.yaml b/attic/templates/argo-workflows.yaml deleted file mode 100644 index b7515f71..00000000 --- a/attic/templates/argo-workflows.yaml +++ /dev/null @@ -1,43 +0,0 @@ -{{- if .Values.argo_workflows.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: argo-workflows - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "-1" -spec: - destination: - namespace: argocd - server: 'https://kubernetes.default.svc' - sources: - - repoURL: 'https://argoproj.github.io/argo-helm' - targetRevision: {{ .Values.argo_workflows.version }} - chart: argo-workflows - helm: - values: | - controller: - workflowNamespaces: - {{- .Values.argo_workflows.allowed_namespaces | toYaml | nindent 10 }} - {{- with .Values.argo_workflows.metrics.enabled }} - metricsConfig: - enabled: true - serviceMonitor: - enabled: true - {{- end }} - server: - extraArgs: - - --auth-mode=server - workflow: - rbac: - create: true - serviceAccount: - create: true - name: argo-workflow - project: argo-workflows - {{- if .Values.argo_workflows.autosync }} - syncPolicy: - automated: - prune: true - {{- end }} -{{- end }} diff --git a/attic/templates/argocd-apps.yaml b/attic/templates/argocd-apps.yaml deleted file mode 100644 index 7447c5fd..00000000 --- a/attic/templates/argocd-apps.yaml +++ /dev/null @@ -1,154 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: argocd-apps - namespace: argocd -spec: - destination: - namespace: argocd - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://argoproj.github.io/argo-helm' - targetRevision: {{ .Values.argocd_apps.version }} - chart: argocd-apps - helm: - values: | - projects: - # System component project - - name: sys - namespace: argocd - description: sys components project - sourceRepos: - - '{{ .Values.cluster_config.manifests }}' - - 'https://argoproj.github.io/argo-helm' - - 'https://gitlab.com/oceanbox/manifests.git' - - 'https://kubernetes-sigs.github.io/metrics-server/' - - 'https://kubernetes.github.io/ingress-nginx' - - 'https://cloudnative-pg.github.io/charts' - - 'https://charts.jetstack.io' - - 'https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/' - - 'https://github.com/kubernetes/dashboard' - - 'https://bitnami-labs.github.io/sealed-secrets' - - 'https://prometheus-community.github.io/helm-charts' - - 'https://github.com/prometheus-community/helm-charts.git' - - 'https://charts.gitlab.io/' - - 'https://charts.bitnami.com/bitnami' - - 'https://helm.linkerd.io/stable' - - 'https://github.com/jaegertracing/jaeger-operator' - - 'https://kyverno.github.io/kyverno/' - - 'https://vmware-tanzu.github.io/helm-charts' - - 'https://grafana.github.io/helm-charts' - - 'https://charts.enix.io' - - 'https://helm.mariadb.com/mariadb-operator' - - 'https://helm.cilium.io' - - 'https://chartmuseum.github.io/charts' - - 'https://open-telemetry.github.io/opentelemetry-helm-charts' - - 'https://strimzi.io/charts' - - 'https://helm.elastic.co' - - 'https://1password.github.io/connect-helm-charts' - - 'https://actions-runner-controller.github.io/actions-runner-controller' - - 'https://imio.github.io/helm-charts' - - 'https://docs.altinity.com/clickhouse-operator' - - destinations: - - namespace: argocd - server: https://kubernetes.default.svc - - namespace: kube-system - server: https://kubernetes.default.svc - - namespace: ingress-nginx - server: https://kubernetes.default.svc - - namespace: prometheus - server: https://kubernetes.default.svc - - namespace: cnpg - server: https://kubernetes.default.svc - - namespace: cert-manager - server: https://kubernetes.default.svc - - namespace: kubernetes-dashboard - server: https://kubernetes.default.svc - - namespace: rabbitmq - server: https://kubernetes.default.svc - - namespace: sealed-secrets - server: https://kubernetes.default.svc - - namespace: gitlab - server: https://kubernetes.default.svc - - namespace: thanos - server: https://kubernetes.default.svc - - namespace: linkerd - server: https://kubernetes.default.svc - - namespace: linkerd-multicluster - server: https://kubernetes.default.svc - - namespace: observability - server: https://kubernetes.default.svc - - namespace: kyverno - server: https://kubernetes.default.svc - - namespace: velero - server: https://kubernetes.default.svc - - namespace: loki - server: https://kubernetes.default.svc - - namespace: tempo - server: https://kubernetes.default.svc - - namespace: otel - server: https://kubernetes.default.svc - - namespace: x509-exporter - server: https://kubernetes.default.svc - - namespace: mariadb-operator - server: https://kubernetes.default.svc - - namespace: cilium-spire - server: https://kubernetes.default.svc - - namespace: cilium-secrets - server: https://kubernetes.default.svc - - namespace: actions-runner-controller - server: https://kubernetes.default.svc - - namespace: analytics - server: https://kubernetes.default.svc - - namespace: clickhouse - server: https://kubernetes.default.svc - clusterResourceWhitelist: - - group: '*' - kind: '*' - - {{- if .Values.argo_workflows.enabled }} - - name: argo-workflows - namespace: argocd - description: argo-workflows resources - sourceRepos: - - 'https://argoproj.github.io/argo-helm' - destinations: - - namespace: argocd - server: https://kubernetes.default.svc - {{- range .Values.argo_workflows.allowed_namespaces }} - - namespace: {{.}} - server: https://kubernetes.default.svc - {{- end }} - namespaceResourceWhitelist: - - group: "rbac.authorization.k8s.io" - kind: Role - - group: "rbac.authorization.k8s.io" - kind: RoleBinding - - group: "" - kind: ConfigMap - - group: "" - kind: Secret - - group: "" - kind: Service - - group: "" - kind: ServiceAccount - - group: apps - kind: Deployment - - group: "monitoring.coreos.com" - kind: ServiceMonitor - clusterResourceWhitelist: - - group: rbac.authorization.k8s.io - kind: ClusterRole - - group: rbac.authorization.k8s.io - kind: ClusterRoleBinding - - group: apiextensions.k8s.io - kind: CustomResourceDefinition - {{- end }} - project: sys - syncPolicy: - automated: {} - syncOptions: - - ServerSideApply=true - - CreateNamespace=true - - ApplyOutOfSyncOnly=true diff --git a/attic/templates/busynix.yaml b/attic/templates/busynix.yaml deleted file mode 100644 index d232531e..00000000 --- a/attic/templates/busynix.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if .Values.busynix.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: busynix - namespace: argocd -spec: - project: aux - destination: - namespace: default - server: https://kubernetes.default.svc - source: - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/busynix - plugin: - name: kustomize-helm-with-rewrite - parameters: - - name: env - string: staging - - name: hostname - string: busynix.beta.oceanbox.io -{{- end }} diff --git a/attic/templates/cert-manager.yaml b/attic/templates/cert-manager.yaml deleted file mode 100644 index c510a4f8..00000000 --- a/attic/templates/cert-manager.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: cert-manager - namespace: argocd -spec: - destination: - namespace: cert-manager - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/cert-manager - targetRevision: HEAD - - repoURL: 'https://charts.jetstack.io' - targetRevision: {{ .Values.cert_manager.version }} - chart: cert-manager - helm: - values: | - installCRDs: true - enableCertificateOwnerRef: true - startupapicheck: - podAnnotations: - linkerd.io/inject: disabled - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.cert_manager.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} diff --git a/attic/templates/chartmuseum.yaml b/attic/templates/chartmuseum.yaml deleted file mode 100644 index 22a8bbfc..00000000 --- a/attic/templates/chartmuseum.yaml +++ /dev/null @@ -1,60 +0,0 @@ -{{- if .Values.chartmuseum.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: chartmuseum - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: argocd - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://chartmuseum.github.io/charts' - targetRevision: {{ .Values.chartmuseum.version }} - chart: chartmuseum - helm: - values: | - env: - open: - ENABLE_METRICS: true - DISABLE_API: false - ALLOW_OVERWRITE: false - CHART_URL: "" - AUTH_ANONYMOUS_GET: true - existingSecret: chartmuseum-basic-auth - existingSecretMappings: - BASIC_AUTH_USER: user - BASIC_AUTH_PASS: password - extraArgs: - - --web-template-path=/storage/web - serviceMonitor: - enabled: false - persistence: - enabled: true - accessMode: ReadWriteOnce - size: {{ .Values.chartmuseum.storage.size }} - path: /storage - storageClass: "" - ingress: - enabled: {{ .Values.chartmuseum.ingress.enabled }} - annotations: - {{- with .Values.cluster_config.ingress_whitelist_ips}} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - ingressClassName: nginx - hosts: - - name: charts.{{ .Values.cluster_config.domain }} - path: / - tls: true - tlsSecret: chartmuseum-tls - project: sys - {{- if .Values.chartmuseum.autosync }} - syncPolicy: - automated: - prune: true - # selfHeal: false - {{- end }} -{{- end }} diff --git a/attic/templates/clickhouse.yaml b/attic/templates/clickhouse.yaml deleted file mode 100644 index af8799cc..00000000 --- a/attic/templates/clickhouse.yaml +++ /dev/null @@ -1,45 +0,0 @@ -{{ if .Values.clickhouse_operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: clickhouse-operator - namespace: argocd -spec: - destination: - namespace: clickhouse - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/clickhouse - targetRevision: HEAD - - repoURL: 'https://docs.altinity.com/clickhouse-operator' - targetRevision: {{ .Values.clickhouse_operator.version }} - chart: altinity-clickhouse-operator - helm: - values: | - configs: - files: - config.yaml: - watch: - namespaces: ["analytics", "analytics-production"] - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - - ServerSideApply=true - {{- if .Values.clickhouse_operator.version }} - automated: - # selfHeal: false - prune: true - {{- end }} - ignoreDifferences: - - group: apps - kind: Deployment - jqPathExpressions: - - .spec.template.spec.containers[].env[].valueFrom.resourceFieldRef.divisor - - .spec.template.spec.initContainers[].env[].valueFrom.resourceFieldRef.divisor -{{ end }} diff --git a/attic/templates/dapr.yaml b/attic/templates/dapr.yaml deleted file mode 100644 index dc686c68..00000000 --- a/attic/templates/dapr.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{{- if .Values.dapr.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: dapr - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: dapr-system - server: https://kubernetes.default.svc - project: default - syncPolicy: - # managedNamespaceMetadata: - # labels: - # component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: https://dapr.github.io/helm-charts/ - targetRevision: 1.14.4 - chart: dapr - helm: - values: | - global: - ha: - enabled: true -{{- end }} diff --git a/attic/templates/dex.yaml b/attic/templates/dex.yaml deleted file mode 100644 index fa8289e0..00000000 --- a/attic/templates/dex.yaml +++ /dev/null @@ -1,29 +0,0 @@ -{{ if .Values.dex.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-dex - namespace: argocd -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: dex - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: 'values/dex/prod' - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/dex/resources - - repoURL: https://charts.dexidp.io - targetRevision: 0.19.1 - chart: dex - helm: - valueFiles: - - $values/values/dex/values.yaml - - $values/values/dex/values-prod.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values -{{- end }} diff --git a/attic/templates/downscaler.yaml b/attic/templates/downscaler.yaml deleted file mode 100644 index 54910d53..00000000 --- a/attic/templates/downscaler.yaml +++ /dev/null @@ -1,47 +0,0 @@ -{{ if .Values.downscaler.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: downscaler - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: kube-downscaler - server: 'https://kubernetes.default.svc' - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.downscaler.autosync }} - automated: - prune: true - # selfHeal: true - {{- end }} - sources: - - repoURL: '{{ .Values.cluster_config.manifests }}' - path: {{ .Values.cluster_config.policies }}/downscaler - targetRevision: HEAD - - repoURL: 'https://caas-team.github.io/helm-charts/' - targetRevision: {{ .Values.downscaler.version }} - chart: py-kube-downscaler - helm: - values: | - arguments: - - --interval=60 - - --include-resources=deployments,statefulsets,scaledobjects,cronjobs - # Namespaces being excluded from the 'downscale for non-work hours' - # DEFAULT_UPTIME: "Mon-Fri 07:30-20:30 CET" - {{- with .Values.downscaler.excludedNamespaces }} - excludedNamespaces: {{ join "," . }} - {{- end }} - extraConfig: {{- toYaml .Values.downscaler.extraConfig | nindent 8 }} -{{ end }} - diff --git a/attic/templates/geoserver.yaml b/attic/templates/geoserver.yaml deleted file mode 100644 index f5c3b589..00000000 --- a/attic/templates/geoserver.yaml +++ /dev/null @@ -1,27 +0,0 @@ -{{ if .Values.geoserver.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-geoserver - namespace: argocd -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: geoserver - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/geoserver - plugin: - name: kustomize-helm-with-rewrite - parameters: - - name: env - string: prod - - name: hostname - string: geoserver.srv.oceanbox.io - - name: flags - string: "--skip-tests" - - name: chart - string: ncsa/geoserver -{{- end }} diff --git a/attic/templates/gitlab-runner.yaml b/attic/templates/gitlab-runner.yaml deleted file mode 100644 index b8e1ad9a..00000000 --- a/attic/templates/gitlab-runner.yaml +++ /dev/null @@ -1,78 +0,0 @@ -{{ if .Values.gitlab_runner.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: gitlab-runner - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: gitlab - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://charts.gitlab.io/' - targetRevision: {{ .Values.gitlab_runner.version }} - chart: gitlab-runner - helm: - releaseName: runner-gitlab-runner - values: | - gitlabUrl: https://gitlab.com/ - # certsSecretName: cluster-ca - # sentryDsn: https://cb9cbeb704c4454fadf0d231602b7abc@o990465.ingest.sentry.io/5996879 - - checkInterval: 15 - - rbac: - create: true - clusterWideAccess: true - - service: - enabled: true - - metrics: - enabled: true - serviceMonitor: - enabled: true - - runners: - tags: kubernetes, {{ .Values.gitlab_runner.tag }}, {{ .Values.cluster_config.cluster }}, {{ .Values.cluster_config.env}} - executor: kubernetes - cache: - secretName: s3access - secret: runner-token - - # tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function - # runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configurati> - config: | - [[runners]] - [runners.kubernetes] - pull_policy = "always" - namespace = "gitlab" - image = "ubuntu:24.04" - [runners.cache] - Path = "" - Shared = true - Type = "s3" - [runners.cache.s3] - BucketLocation = "us-east-1" - AuthenticationType = "access-key" - AccessKey = {{ .Values.gitlab_runner.s3.access_key }} - SecretKey = {{ .Values.gitlab_runner.s3.secret_key }} - ServerAddress = {{ .Values.gitlab_runner.s3.server }} - BucketName = "gitlab-runner" - Insecure = false - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.gitlab_runner.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/headscale.yaml b/attic/templates/headscale.yaml deleted file mode 100644 index f2392c5a..00000000 --- a/attic/templates/headscale.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if .Values.headscale.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: headscale - namespace: argocd -spec: - project: default - destination: - server: https://kubernetes.default.svc - namespace: headscale - sources: - - repoURL: https://charts.gabe565.com - targetRevision: 0.16.0 - chart: headscale - helm: - valueFiles: - - $values/values/headscale/values.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values - -{{- end }} diff --git a/attic/templates/ingress-nginx.yaml b/attic/templates/ingress-nginx.yaml deleted file mode 100644 index 0e37dfa2..00000000 --- a/attic/templates/ingress-nginx.yaml +++ /dev/null @@ -1,132 +0,0 @@ -{{- if .Values.nginx.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: ingress-nginx - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true -spec: - destination: - namespace: ingress-nginx - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/ingress-nginx - targetRevision: HEAD - - repoURL: 'https://kubernetes.github.io/ingress-nginx' - targetRevision: {{ .Values.nginx.version }} - chart: ingress-nginx - helm: - values: | - ## nginx configuration - ## Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/index.md - ## - ## Overrides for generated resource names - # See templates/_helpers.tpl - # nameOverride: - fullnameOverride: main-ingress-nginx - controller: - resources: - limits: - memory: {{ .Values.nginx.resources.controller.memory }} - requests: - cpu: {{ .Values.nginx.resources.controller.cpu }} - memory: {{ .Values.nginx.resources.controller.memory }} - - ingressClassResource: - default: true - - tolerations: - - key: unschedulable - operator: Exists - effect: NoSchedule - - key: node-role.kubernetes.io/control-plane - operator: Exists - effect: NoSchedule - - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/hostname - operator: In - values: {{ .Values.cluster_config.ingress_nodes }} - - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app.kubernetes.io/instance - operator: In - values: - - ingress-nginx - - key: app.kubernetes.io/component - operator: In - values: - - controller - topologyKey: "kubernetes.io/hostname" - - podAnnotations: - config.linkerd.io/skip-inbound-ports: 80,443 - - replicaCount: {{ .Values.cluster_config.ingress_replica_count }} - - minAvailable: {{ .Values.nginx.pdb.minAvailable }} - - service: - externalTrafficPolicy: Local - # type: ClusterIP - type: NodePort - # nodePorts: - # http: 32080 - # https: 32443 - # tcp: - # 8080: 32808 - nodePorts: - http: 30080 - https: 30443 - tcp: {} - udp: {} - - metrics: - enabled: true - - service: - annotations: - prometheus.io/scrape: "true" - prometheus.io/port: "10254" - - servicePort: 9913 - type: ClusterIP - - serviceMonitor: - enabled: true - - admissionWebhooks: - enabled: false - - ## Default 404 backend - ## - defaultBackend: - enabled: true - - tolerations: - - key: unschedulable - operator: Exists - effect: NoSchedule - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.nginx.autosync}} - automated: - prune: true - # selfHeal: false - {{- end }} -{{- end }} diff --git a/attic/templates/jaeger-operator.yaml b/attic/templates/jaeger-operator.yaml deleted file mode 100644 index fd309841..00000000 --- a/attic/templates/jaeger-operator.yaml +++ /dev/null @@ -1,36 +0,0 @@ -{{ if .Values.jaeger_operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: jaeger-operator - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: observability - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/jaeger-operator - targetRevision: HEAD - - repoURL: "https://github.com/jaegertracing/jaeger-operator" - targetRevision: v{{ .Values.jaeger_operator.version }} - path: bundle/manifests - directory: - # Exclude jaeger-operator clusterserviceversion, as we don't have operator lifecycle manager installed - exclude: jaeger-operator.clusterserviceversion.yaml - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.jaeger_operator.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/keycloak.yaml b/attic/templates/keycloak.yaml deleted file mode 100644 index e3425eab..00000000 --- a/attic/templates/keycloak.yaml +++ /dev/null @@ -1,39 +0,0 @@ -{{ if .Values.keycloak.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-keycloak - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: keycloak - syncPolicy: - managedNamespaceMetadata: - labels: - component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/keycloak/prod - - repoURL: https://charts.bitnami.com/bitnami - targetRevision: 24.0.2 - chart: keycloak - helm: - valueFiles: - - $values/values/keycloak/values-prod.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values -{{- end }} diff --git a/attic/templates/kubernetes-dashboard.yaml b/attic/templates/kubernetes-dashboard.yaml deleted file mode 100644 index 1b2efa19..00000000 --- a/attic/templates/kubernetes-dashboard.yaml +++ /dev/null @@ -1,30 +0,0 @@ -{{ if .Values.kubernetes_dashboard.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: kubernetes-dashboard - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: kubernetes-dashboard - server: 'https://kubernetes.default.svc' - source: - path: aio/deploy/recommended - repoURL: https://github.com/kubernetes/dashboard - targetRevision: {{ .Values.kubernetes_dashboard.version }} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.kubernetes_dashboard.autosync }} - automated: - prune: true - # selfHeal: false - {{ end }} -{{ end }} diff --git a/attic/templates/kyverno.yaml b/attic/templates/kyverno.yaml deleted file mode 100644 index d9ff0aed..00000000 --- a/attic/templates/kyverno.yaml +++ /dev/null @@ -1,84 +0,0 @@ -{{ if .Values.kyverno.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: kyverno - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: kyverno - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/kyverno - targetRevision: HEAD - - repoURL: 'https://kyverno.github.io/kyverno/' - targetRevision: {{ .Values.kyverno.version }} - chart: kyverno - helm: - values: | - replicaCount: 3 - {{ if .Values.kyverno.metrics }} - admissionController: - serviceMonitor: - enabled: true - metricsService: - create: true - backgroundController: - serviceMonitor: - enabled: true - metricsService: - create: true - cleanupController: - serviceMonitor: - enabled: true - metricsService: - create: true - reportsController: - serviceMonitor: - enabled: true - metricsService: - create: true - {{ end }} - cleanupController: - resources: - limits: - memory: {{ .Values.kyverno.resources.cleanupController.memory }} - requests: - memory: {{ .Values.kyverno.resources.cleanupController.memory }} - reportsController: - resources: - limits: - memory: {{ .Values.kyverno.resources.reportsController.memory }} - requests: - memory: {{ .Values.kyverno.resources.reportsController.memory }} - backgroundController: - resources: - limits: - memory: {{ .Values.kyverno.resources.backgroundController.memory }} - requests: - memory: {{ .Values.kyverno.resources.backgroundController.memory }} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - - ServerSideApply=true - {{- if .Values.kyverno.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} - ignoreDifferences: - - group: batch - kind: CronJob - jqPathExpressions: - - '.spec.jobTemplate.spec.template.spec.containers[]?.resources' -{{ end }} diff --git a/attic/templates/linkerd-crds.yaml b/attic/templates/linkerd-crds.yaml deleted file mode 100644 index 5bceb653..00000000 --- a/attic/templates/linkerd-crds.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{{ if .Values.linkerd.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: linkerd-crds - namespace: argocd - #finalizers: - #- resources-finalizer.argocd.argoproj.io -spec: - ignoreDifferences: - - group: apiextensions.k8s.io - kind: CustomResourceDefinition - jsonPointers: - - /spec/names/shortNames - destination: - namespace: linkerd - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://helm.linkerd.io/stable' - targetRevision: {{ .Values.linkerd.crds.version }} - chart: linkerd-crds - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.linkerd.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/linkerd-multicluster.yaml b/attic/templates/linkerd-multicluster.yaml deleted file mode 100644 index c7ad1afc..00000000 --- a/attic/templates/linkerd-multicluster.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{{ if .Values.linkerd.multicluster.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: linkerd-multicluster - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io - annotations: - # Should sync after linkerd (which is wave 0) - argocd.argoproj.io/sync-wave: "1" -spec: - destination: - namespace: linkerd-multicluster - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://helm.linkerd.io/stable' - targetRevision: {{ .Values.linkerd.multicluster.version }} - chart: linkerd-multicluster - helm: - values: | - gateway: - serviceType: "NodePort" - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - # selfHeal: false -{{ end }} diff --git a/attic/templates/linkerd.yaml b/attic/templates/linkerd.yaml deleted file mode 100644 index 0883b036..00000000 --- a/attic/templates/linkerd.yaml +++ /dev/null @@ -1,100 +0,0 @@ -{{ if .Values.linkerd.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: linkerd - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "5" - #finalizers: - #- resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: linkerd - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/linkerd - targetRevision: HEAD - - repoURL: 'https://helm.linkerd.io/stable' - targetRevision: {{ .Values.linkerd.version }} - chart: linkerd-control-plane - helm: - values: | - identityTrustAnchorsPEM: {{- .Values.linkerd.trustAnchorPEM | toYaml | indent 7 }} - identity: - issuer: - scheme: {{ .Values.linkerd.secretScheme }} - {{- if .Values.linkerd.identityIssuerPEM }} - tls: - crtPEM: {{- .Values.linkerd.identityIssuerPEM | toYaml | indent 14 }} - {{- end }} - policyValidator: - externalSecret: true - caBundle: {{- .Values.linkerd.webhookPEM | toYaml | indent 9 }} - proxyInjector: - externalSecret: true - caBundle: {{- .Values.linkerd.webhookPEM | toYaml | indent 9 }} - profileValidator: - externalSecret: true - caBundle: {{- .Values.linkerd.webhookPEM | toYaml | indent 9 }} - - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.linkerd.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} - ignoreDifferences: - - group: batch - kind: CronJob - jsonPointers: - - /spec/schedule - - kind: Secret - name: linkerd-proxy-injector-k8s-tls - jsonPointers: - - /data/tls.crt - - /data/tls.key - - kind: Secret - name: linkerd-sp-validator-k8s-tls - jsonPointers: - - /data/tls.crt - - /data/tls.key - - kind: Secret - name: linkerd-tap-k8s-tls - jsonPointers: - - /data/tls.crt - - /data/tls.key - - kind: Secret - name: linkerd-policy-validator-k8s-tls - jsonPointers: - - /data/tls.crt - - /data/tls.key - - group: admissionregistration.k8s.io - kind: MutatingWebhookConfiguration - name: linkerd-proxy-injector-webhook-config - jqPathExpressions: - - '.webhooks[0].clientConfig.caBundle' - - group: admissionregistration.k8s.io - kind: ValidatingWebhookConfiguration - name: linkerd-sp-validator-webhook-config - jqPathExpressions: - - '.webhooks[0].clientConfig.caBundle' - - group: admissionregistration.k8s.io - kind: ValidatingWebhookConfiguration - name: linkerd-policy-validator-webhook-config - jqPathExpressions: - - '.webhooks[0].clientConfig.caBundle' - - group: apiregistration.k8s.io/v1 - kind: APIService - name: v1alpha1.tap.linkerd.io - jsonPointers: - - /spec/caBundle -{{ end }} diff --git a/attic/templates/loki.yaml b/attic/templates/loki.yaml deleted file mode 100644 index d11ad705..00000000 --- a/attic/templates/loki.yaml +++ /dev/null @@ -1,145 +0,0 @@ -{{ if .Values.loki.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: loki - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: loki - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/loki - targetRevision: HEAD - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: {{ .Values.loki.version }} - chart: loki - helm: - values: | - loki: - auth_enabled: false - storage: - bucketNames: - chunks: {{ .Values.loki.buckets.chunks }} - ruler: {{ .Values.loki.buckets.ruler }} - admin: {{ .Values.loki.buckets.admin }} - s3: - endpoint: {{ .Values.loki.s3.endpoint | default "https://s3.production.itpartner.no" }} - region: {{ .Values.loki.s3.region | default "us-east-1" }} - secretAccessKey: ${S3SECRET} - accessKeyId: ${S3KEY} - s3ForcePathStyle: true - {{- if .Values.loki.s3.insecure_skip_verify }} - http_config: - insecure_skip_verify: true - {{- end }} - schemaConfig: - configs: - - from: "2022-09-28" - index: - period: 24h - prefix: loki_index_ - object_store: s3 - schema: v13 - store: tsdb - {{- if .Values.loki.compactor }} - compactor: - compaction_interval: 10m - working_directory: /tmp/loki/compactor - retention_enabled: true - retention_delete_delay: 2h - retention_delete_worker_count: 150 - delete_request_store: s3 - {{- end }} - write: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_key" }} - - name: S3SECRET - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_secret" }} - tolerations: - - effect: "NoSchedule" - operator: "Equal" - key: "unschedulable" - value: "true" - read: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_key" }} - - name: S3SECRET - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_secret" }} - tolerations: - - effect: "NoSchedule" - operator: "Equal" - key: "unschedulable" - value: "true" - {{- if .Values.loki.compactor }} - compactor: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_key" }} - - name: S3SECRET - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_secret" }} - {{- end }} - backend: - extraArgs: - - -config.expand-env=true - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_key" }} - - name: S3SECRET - valueFrom: - secretKeyRef: - name: {{ .Values.loki.secret.name | default "s3-credentials"}} - key: {{ .Values.loki.secret.access_key | default "access_secret" }} - project: sys - ignoreDifferences: - - group: apps - kind: StatefulSet - jsonPointers: - - /spec/persistentVolumeClaimRetentionPolicy - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.loki.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/mariadb-operator.yaml b/attic/templates/mariadb-operator.yaml deleted file mode 100644 index a91f4a83..00000000 --- a/attic/templates/mariadb-operator.yaml +++ /dev/null @@ -1,46 +0,0 @@ -{{- if .Values.mariadb_operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: mariadb-operator - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "-1" -spec: - destination: - namespace: mariadb-operator - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/mariadb-operator - targetRevision: HEAD - - repoURL: 'https://helm.mariadb.com/mariadb-operator' - targetRevision: {{ .Values.mariadb_operator.version }} - chart: mariadb-operator - helm: - values: | - ha: - enabled: false - metrics: - enabled: true - serviceMonitor: - additionalLabels: - release: prometheus - enabled: true - webhook: - certificate: - certManager: false - serviceMonitor: - additionalLabels: - release: prometehus - project: sys - syncPolicy: - syncOptions: - - CreateNamespace=true - - ServerSideApply=true - {{- if .Values.mariadb_operator.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{- end }} diff --git a/attic/templates/metricserver.yaml b/attic/templates/metricserver.yaml deleted file mode 100644 index 6c8e55e5..00000000 --- a/attic/templates/metricserver.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: metrics-server - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: kube-system - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://kubernetes-sigs.github.io/metrics-server/' - targetRevision: {{ .Values.metrics_server.version }} - chart: metrics-server - helm: - values: | - containerPort: 10250 - resources: - requests: - cpu: 100m - memory: 200Mi - {{- if .Values.metrics_server.ignoreTLS }} - args: - - "--kubelet-insecure-tls" - {{- end }} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.metrics_server.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} diff --git a/attic/templates/nfs-provisioner.yaml b/attic/templates/nfs-provisioner.yaml deleted file mode 100644 index 7866b236..00000000 --- a/attic/templates/nfs-provisioner.yaml +++ /dev/null @@ -1,46 +0,0 @@ -{{- if .Values.nfs_provisioner.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: nfs-provisioner - namespace: argocd -spec: - destination: - namespace: kube-system - server: 'https://kubernetes.default.svc' - source: - #- repoURL: {{ .Values.cluster_config.manifests }} - # path: {{ .Values.cluster_config.policies }}/nfs-provisioner - # targetRevision: HEAD - repoURL: 'https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/' - targetRevision: {{ .Values.nfs_provisioner.version }} - chart: nfs-subdir-external-provisioner - helm: - values: | - nfs: - server: {{ .Values.cluster_config.fileserver }} - path: /{{ default (.Values.cluster_config.cluster) .Values.nfs_provisioner.path }} - mountOptions: - - nfsvers=4.2 - {{- range .Values.nfs_provisioner.extraMountOpts }} - - {{ . }} - {{- end }} - storageClass: - defaultClass: {{ .Values.nfs_provisioner.defaultClass}} - name: managed-nfs-storage - archiveOnDelete: {{ .Values.nfs_provisioner.archiveOnDelete }} - tolerations: - - key: unschedulable - operator: Exists - effect: NoSchedule - project: sys - syncPolicy: - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.nfs_provisioner.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{- end }} diff --git a/attic/templates/oncall.yaml b/attic/templates/oncall.yaml deleted file mode 100644 index 8b7f3287..00000000 --- a/attic/templates/oncall.yaml +++ /dev/null @@ -1,104 +0,0 @@ -{{ if .Values.oncall.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: oncall - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: prometheus - server: 'https://kubernetes.default.svc' - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{ if .Values.oncall.autosync }} - automated: - prune: true - # selfHeal: false - {{ end }} - sources: -# - repoURL: {{ .Values.cluster_config.manifests }} -# path: {{ .Values.cluster_config.policies }}/oncall -# targetRevision: HEAD - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: '{{ .Values.oncall.version }}' - chart: oncall - helm: - values: | - base_url: oncall.{{ .Values.cluster_config.domain }} - base_url_protocol: https - image: - repository: grafana/oncall - pullPolicy: IfNotPresent - ingress-nginx: - enabled: false - cert-manager: - enabled: false - installCRDs: false - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - path: / - pathType: Prefix - hosts: - - oncall.{{ .Values.cluster_config.domain }} - tls: - - secretName: oncall-tls - hosts: - - oncall.{{ .Values.cluster_config.domain }} - - {{- if .Values.oncall.slack }} - oncall: - slack: - enabled: true - clientId: {{ .Values.oncall.slack.clientId }} - clientSecret: {{ .Values.oncall.slack.clientSecret }} - signingSecret: {{ .Values.oncall.slack.signingSecret }} - redirectHost: https://oncall.{{ .Values.cluster_config.domain }} - {{- end }} - - {{- if .Values.oncall.smtp }} - oncall: - smtp: - enabled: true - host: {{ .Values.oncall.smtp.host }} - port: {{ .Values.oncall.smtp.port }} - username: {{ .Values.oncall.smtp.username }} - password: {{ .Values.oncall.smtp.password }} - tls: {{ .Values.oncall.smtp.tls }} - fromEmail: {{ .Values.oncall.smtp.fromEmail }} - {{- end }} - database: - type: postgresql - postgresql: - enabled: true - auth: - database: oncall - mariadb: - enabled: false - redis: - enabled: true - broker: - type: rabbitmq - rabbitmq: - enabled: true - grafana: - enabled: false - externalGrafana: - url: {{ .Values.oncall.externalGrafana.url }} -{{- end }} diff --git a/attic/templates/openfga.yaml b/attic/templates/openfga.yaml deleted file mode 100644 index 7c83f346..00000000 --- a/attic/templates/openfga.yaml +++ /dev/null @@ -1,43 +0,0 @@ -{{ if .Values.openfga.enabled }} -{{- range .Values.atlantis.envs }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-openfga - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: openfga - server: https://kubernetes.default.svc - project: aux - # ignoreDifferences: - # - group: apps - # kind: StatefulSet - # jsonPointers: - # - /spec/persistentVolumeClaimRetentionPolicy - syncPolicy: - managedNamespaceMetadata: - labels: - component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - sources: - - repoURL: https://openfga.github.io/helm-charts - targetRevision: 0.2.21 - chart: openfga - helm: - valueFiles: - - $values/values/openfga/values-prod.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values -{{- end }} -{{- end }} diff --git a/attic/templates/osm-tile-server.yaml b/attic/templates/osm-tile-server.yaml deleted file mode 100644 index c5a4753c..00000000 --- a/attic/templates/osm-tile-server.yaml +++ /dev/null @@ -1,36 +0,0 @@ -{{- if .Values.osm-tile-server.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: ApplicationSet -metadata: - name: osm-tile-server - namespace: argocd -spec: - generators: - - list: - elements: - - cluster: https://kubernetes.default.svc - env: prod - hostname: osm.srv.oceanbox.io - - cluster: https://staging-vcluster.staging-vcluster - env: staging - hostname: osm.beta.oceanbox.io - template: - metadata: - name: '{{- env }}-osm-tile-server' - spec: - project: aux - destination: - namespace: oceanbox - server: '{{- cluster }}' - source: - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: HEAD - path: values/osm-tile-server - plugin: - name: kustomize-helm-with-rewrite - parameters: - - name: env - string: '{{- env }}' - - name: hostname - string: '{{- hostname }}' -{{- end }} diff --git a/attic/templates/otel-collector.yaml b/attic/templates/otel-collector.yaml deleted file mode 100644 index a3279bc8..00000000 --- a/attic/templates/otel-collector.yaml +++ /dev/null @@ -1,117 +0,0 @@ -{{ if .Values.otel.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: opentelemetry-collector - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: otel - server: 'https://kubernetes.default.svc' - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.otel.autosync }} - automated: - prune: true - # selfHeal: true - {{- end }} - sources: - - repoURL: '{{ .Values.cluster_config.manifests }}' - path: {{ .Values.cluster_config.policies }}/otel - targetRevision: HEAD - - repoURL: 'https://open-telemetry.github.io/opentelemetry-helm-charts' - targetRevision: {{ .Values.otel.version }} - chart: opentelemetry-collector - helm: - values: | - mode: deployment - image: - repository: otel/opentelemetry-collector-k8s - config: - receivers: - prometheus/collector: - config: - scrape_configs: - - job_name: 'opentelemetry-collector' - static_configs: - - targets: - - ${env:MY_POD_IP}:8888 - zipkin: - endpoint: ${env:MY_POD_IP}:9411 - exporters: - otlp: - endpoint: "tempo.tempo.svc:4317" - tls: - insecure: true - ## - otlphttp/metrics: - endpoint: http://prom-prometheus.prometheus:9090/api/v1/otlp - tls: - insecure: true - otlphttp/logs: - endpoint: http://loki-write-headless.loki:3100/otlp - tls: - insecure: true - ## Detailed? make toggleable with values - debug/metrics: - verbosity: detailed - debug/traces: - verbosity: detailed - debug/logs: - verbosity: detailed - service: - telemetry: - logs: - level: "info" - pipelines: - traces: - receivers: [otlp,zipkin] - processors: [batch] - exporters: [otlp] - # exporters: [otlphttp/traces,debug/traces] - metrics: - receivers: [otlp,prometheus/collector] - processors: [batch] - exporters: [otlphttp/metrics] - # exporters: [otlphttp/metrics,debug/metrics] - logs: - receivers: [otlp] - processors: [batch] - exporters: [otlphttp/logs] - # exporters: [otlphttp/logs,debug/logs] - ports: - metrics: - enabled: true - # presets: - # logsCollection: - # enabled: true - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - hosts: - - host: opentelemetry-collector.{{ .Values.cluster_config.domain }} - paths: - - path: / - pathType: Prefix - port: 4318 - tls: - - secretName: collector-tls - hosts: - - opentelemetry-collector.{{ .Values.cluster_config.domain }} -{{ end }} diff --git a/attic/templates/plausible.yaml b/attic/templates/plausible.yaml deleted file mode 100644 index 1a10dcba..00000000 --- a/attic/templates/plausible.yaml +++ /dev/null @@ -1,75 +0,0 @@ -{{- if .Values.plausible.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: plausible-analytics - namespace: argocd -spec: - destination: - namespace: plausible - server: 'https://kubernetes.default.svc' - sources: - - repoURL: 'https://imio.github.io/helm-charts' - targetRevision: 0.4.0 - chart: plausible-analytics - helm: - values: | - baseURL: https://plausible.adm.oceanbox.io - databaseURL: postgres://app:password@plausible-db-rw:5432/app - clickhouse: - resources: - requests: - cpu: 500m - ephemeral-storage: 50Mi - memory: 512Mi - postgresql: - enabled: false - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24,148.122.135.23 - hosts: - - plausible.adm.oceanbox.io - paths: - - / - pathType: ImplementationSpecific - tls: - - secretName: plausible-tls - hosts: - - plausible.adm.oceanbox.io - project: aux - syncPolicy: - managedNamespaceMetadata: - labels: - component: aux - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - automated: - prune: true - selfHeal: true - ignoreDifferences: - - kind: Secret - name: plausible-analytics - jqPathExpressions: - - '.data' - - '.metadata.labels' - - '.metadata.annotations' ---- -apiVersion: postgresql.cnpg.io/v1 -kind: Cluster -metadata: - name: plausible-db - namespace: plausible -spec: - imageName: ghcr.io/cloudnative-pg/postgresql:16.3 - primaryUpdateStrategy: unsupervised - instances: 1 - monitoring: - enablePodMonitor: true - storage: - size: 10Gi -{{- end }} diff --git a/attic/templates/policies/cnpg-add-backup-section.yaml b/attic/templates/policies/cnpg-add-backup-section.yaml deleted file mode 100644 index cf9efe69..00000000 --- a/attic/templates/policies/cnpg-add-backup-section.yaml +++ /dev/null @@ -1,52 +0,0 @@ -{{- if and (.Values.kyverno.enabled) (.Values.postgres_operator.enabled) (.Values.velero.enabled) }} -apiVersion : kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: cnpg-add-backup-section - annotations: - policies.kyverno.io/title: add backup section to cnpg cluster spec - policies.kyverno.io/category: Other - policies.kyverno.io/severity: medium - kyverno.io/kyverno-version: 1.6.0 - policies.kyverno.io/minversion: 1.6.0 - kyverno.io/kubernetes-version: "1.23" - policies.kyverno.io/subject: Cluster - policies.kyverno.io/description: >- - When a CNPG cluster is created, a backup section should be added. - The user can then create their own backup or backup schedule. -spec: - background: false - rules: - - name: cnpg-add-backup-section - match: - any: - - resources: - kinds: - - Cluster - exclude: - any: - - resources: - kinds: - - Cluster - names: - - "review-*" - mutate: - patchStrategicMerge: - spec: - backup: - barmanObjectStore: - destinationPath: s3://{{ .Values.velero.bucket }}/{{ .Values.cluster_config.cluster }}/cnpg-backup - serverName: {{` "{{ request.object.metadata.name }}"`}} - endpointURL: https://s3.production.itpartner.no - s3Credentials: - accessKeyId: - key: access_key - name: s3-credentials - inheritFromIAMRole: false - secretAccessKey: - key: access_secret - name: s3-credentials - wal: - compression: snappy -{{- end }} - diff --git a/attic/templates/policies/cnpg-clone-secrets.yaml b/attic/templates/policies/cnpg-clone-secrets.yaml deleted file mode 100644 index 89176fcd..00000000 --- a/attic/templates/policies/cnpg-clone-secrets.yaml +++ /dev/null @@ -1,36 +0,0 @@ -{{- if and (.Values.kyverno.enabled) (.Values.postgres_operator.enabled) (.Values.velero.enabled) }} -apiVersion : kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: cnpg-clone-s3-credentials - annotations: - policies.kyverno.io/title: add backup section to cnpg cluster spec - policies.kyverno.io/category: Other - policies.kyverno.io/severity: medium - kyverno.io/kyverno-version: 1.6.0 - policies.kyverno.io/minversion: 1.6.0 - kyverno.io/kubernetes-version: "1.23" - policies.kyverno.io/subject: Cluster - policies.kyverno.io/description: >- - When a CNPG cluster is created, s3 credentials and CA secrets - should be synced from the velero namespace -spec: - background: false - rules: - - name: clone-s3-credentials - match: - any: - - resources: - kinds: - - Cluster - generate: - apiVersion: v1 - kind: Secret - name: s3-credentials - namespace: {{` "{{request.object.metadata.namespace}}" `}} - synchronize: true - clone: - namespace: velero - name: s3-credentials -{{- end }} - diff --git a/attic/templates/policies/generate-external-admin-rolebinding.yaml b/attic/templates/policies/generate-external-admin-rolebinding.yaml deleted file mode 100644 index 347ad848..00000000 --- a/attic/templates/policies/generate-external-admin-rolebinding.yaml +++ /dev/null @@ -1,55 +0,0 @@ -{{- if and (.Values.cluster_config.external_kubectl_access.enabled) (.Values.kyverno.enabled) }} -apiVersion: kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: generate-external-admin-rolebinding - annotations: - policies.kyverno.io/title: Generate cluster-Admin rolebinding customer namespaces - policies.kyverno.io/category: other - policies.kyverno.io/severity: medium - policies.kyverno.io/subject: Namespace, RoleBinding - kyverno.io/kyverno-version: 1.7.0 - policies.kyverno.io/minversion: 1.7.0 - kyverno.io/kubernetes-version: "1.23" - policies.kyverno.io/description: >- - Customers should not have full admin permissions on their own namespaces. - This policy will generate a RoleBinding, binding their group_id to - the Cluster-Admin clusterrole. This will still only apply to the namespace as - the resource is a rolebinding, not clusterrolebinding. - This policy should not trigger on any namespaces with label component=sys -spec: - generateExistingOnPolicyUpdate: true - rules: - - name: generate-rolebinding - match: - any: - - resources: - kinds: - - Namespace - exclude: - any: - - resources: - kinds: - - Namespace - selector: - matchLabels: - component: sys - generate: - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - name: external-ns-admin - namespace: {{` "{{request.object.metadata.name}}" `}} - synchronize: true - data: - metadata: - labels: - created-by: kyverno - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: {{ .Values.cluster_config.external_kubectl_access.admin_group }} -{{- end }} diff --git a/attic/templates/policies/prometheus-add-folder-to-default-dashboards.yaml b/attic/templates/policies/prometheus-add-folder-to-default-dashboards.yaml deleted file mode 100644 index c2be4190..00000000 --- a/attic/templates/policies/prometheus-add-folder-to-default-dashboards.yaml +++ /dev/null @@ -1,32 +0,0 @@ -{{- if and (.Values.kyverno.enabled) (.Values.prometheus.enabled) }} -apiVersion: kyverno.io/v1 -kind: Policy -metadata: - name: prometheus-stack-default-dashboard-folder - namespace: prometheus -spec: - admission: true - background: true - mutateExistingOnPolicyUpdate: true - rules: - - match: - any: - - resources: - kinds: - - ConfigMap - selector: - matchLabels: - app.kubernetes.io/part-of: kube-prometheus-stack - mutate: - patchStrategicMerge: - metadata: - annotations: - grafana_folder: Prometheus-stack - targets: - - apiVersion: v1 - kind: ConfigMap - name: "{{`{{ request.object.metadata.name }}`}}" - name: generate-dashboard-folder-annotation - skipBackgroundRequests: true - validationFailureAction: Audit -{{- end }} diff --git a/attic/templates/policies/sync-gitlab.yaml b/attic/templates/policies/sync-gitlab.yaml deleted file mode 100644 index 35f7304f..00000000 --- a/attic/templates/policies/sync-gitlab.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: sync-gitlab-secret - annotations: - policies.kyverno.io/title: Sync Secrets - policies.kyverno.io/category: Sample - policies.kyverno.io/subject: Secret - policies.kyverno.io/description: >- - Secrets like registry credentials often need to exist in multiple - Namespaces so Pods there have access. Manually duplicating those Secrets - is time consuming and error prone. This policy will copy a - Secret called `regcred` which exists in the `default` Namespace to - new Namespaces when they are created. It will also push updates to - the copied Secrets should the source Secret be changed. -spec: - rules: - - name: sync-image-pull-secret - match: - resources: - kinds: - - Namespace - generate: - apiVersion: v1 - kind: Secret - name: regcred - namespace: "{{`{{request.object.metadata.name}}`}}" - synchronize: true - clone: - namespace: default - name: gitlab-pull-secret diff --git a/attic/templates/policies/sync-regcred.yaml b/attic/templates/policies/sync-regcred.yaml deleted file mode 100644 index 759f0365..00000000 --- a/attic/templates/policies/sync-regcred.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.kyverno.enabled }} -apiVersion: kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: sync-regcred-secret - annotations: - policies.kyverno.io/title: Sync Secrets - policies.kyverno.io/category: Sample - policies.kyverno.io/subject: Secret - policies.kyverno.io/description: >- - Secrets like registry credentials often need to exist in multiple - Namespaces so Pods there have access. Manually duplicating those Secrets - is time consuming and error prone. This policy will copy a - Secret called `regcred` which exists in the `default` Namespace to - new Namespaces when they are created. It will also push updates to - the copied Secrets should the source Secret be changed. -spec: - rules: - - name: sync-image-pull-secret - match: - resources: - kinds: - - Namespace - generate: - apiVersion: v1 - kind: Secret - name: regcred - namespace: "{{`{{request.object.metadata.name}}`}}" - synchronize: true - clone: - namespace: default - name: regcred -{{- end }} diff --git a/attic/templates/policies/sync-s3-secret.yaml b/attic/templates/policies/sync-s3-secret.yaml deleted file mode 100644 index b1f1ea03..00000000 --- a/attic/templates/policies/sync-s3-secret.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.kyverno.enabled }} -apiVersion: kyverno.io/v1 -kind: ClusterPolicy -metadata: - annotations: - policies.kyverno.io/description: 'This policy will sync the s3 secret in kube-system namespace across namespaces' - policies.kyverno.io/subject: Secret - policies.kyverno.io/title: Sync s3 Secrets - name: sync-s3-credentials -spec: - generateExistingOnPolicyUpdate: true - background: true - rules: - - generate: - apiVersion: v1 - clone: - name: s3-credentials - namespace: kube-system - kind: Secret - name: s3-credentials - namespace: '{{`{{request.object.metadata.name}}`}}' - synchronize: true - match: - resources: - kinds: - - Namespace - names: - - "velero" - - "loki" - - "tempo" - name: sync-s3-secret - validationFailureAction: audit -{{- end }} diff --git a/attic/templates/policies/whitelist-internal-ingresses.yaml b/attic/templates/policies/whitelist-internal-ingresses.yaml deleted file mode 100644 index f9a687f9..00000000 --- a/attic/templates/policies/whitelist-internal-ingresses.yaml +++ /dev/null @@ -1,73 +0,0 @@ -{{- if .Values.kyverno.enabled }} -apiVersion: kyverno.io/v1 -kind: ClusterPolicy -metadata: - name: whitelist-internal-ingresses - annotations: - policies.kyverno.io/title: Concatenate Ingresss - policies.kyverno.io/category: Other - policies.kyverno.io/severity: medium - policies.kyverno.io/subject: Ingress - policies.kyverno.io/description: >- - Ingresses with the label "internal=true" should be whitelisted. - If no whitelist exists, add the default values, otherwise append - whitelist to the already existing ones -spec: - mutateExistingOnPolicyUpdate: false - #precondition: has whitelist annotation or - rules: - - name: ensure-nginx-whitelist-exists - match: - resources: - kinds: - - Ingress - selector: - matchLabels: - internal: "true" - mutate: - patchStrategicMerge: - metadata: - annotations: - +(nginx.ingress.kubernetes.io/whitelist-source-range): "" - - name: append-existing-whitelist - match: - resources: - kinds: - - Ingress - selector: - matchLabels: - internal: "true" - preconditions: - any: - - key: "{{`{{request.object.metadata.annotations.\"nginx.ingress.kubernetes.io/whitelist-source-range\"}}`}}" - operator: NotEquals - value: "" - mutate: - patchStrategicMerge: - metadata: - annotations: - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: "{{`{{ @ }}`}},{{ join "," . }}" - {{- end }} - - name: add-nginx-whitelist - match: - resources: - kinds: - - Ingress - selector: - matchLabels: - internal: "true" - preconditions: - any: - - key: "{{`{{request.object.metadata.annotations.\"nginx.ingress.kubernetes.io/whitelist-source-range\"}}`}}" - operator: Equals - value: "" - mutate: - patchStrategicMerge: - metadata: - annotations: - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: "{{ join "," . }}" - {{- end }} -{{- end }} - diff --git a/attic/templates/postgres-operator.yaml b/attic/templates/postgres-operator.yaml deleted file mode 100644 index 9abdd60d..00000000 --- a/attic/templates/postgres-operator.yaml +++ /dev/null @@ -1,39 +0,0 @@ -{{ if .Values.postgres_operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: postgres-operator - namespace: argocd -spec: - destination: - namespace: cnpg - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/cnpg - targetRevision: HEAD - - repoURL: 'https://cloudnative-pg.github.io/charts' - targetRevision: {{ .Values.postgres_operator.version }} - chart: cloudnative-pg - helm: - values: | - additionalArgs: [] - config: - data: - INHERITED_ANNOTATIONS: "linkerd.io/*" - INHERITED_LABELS: "velero.io/*" - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - - ServerSideApply=true - {{- if .Values.postgres_operator.version }} - automated: - # selfHeal: false - prune: true - {{- end }} -{{ end }} diff --git a/attic/templates/prometheus-thanos.yaml b/attic/templates/prometheus-thanos.yaml deleted file mode 100644 index b1b4f3f6..00000000 --- a/attic/templates/prometheus-thanos.yaml +++ /dev/null @@ -1,342 +0,0 @@ -{{ if .Values.thanos.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: thanos - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: thanos - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://charts.bitnami.com/bitnami' - targetRevision: {{ .Values.thanos.version }} - chart: thanos - helm: - values: | - ## Handled by sealed secret now, and uses minio root user - #objstoreConfig: |- - # type: s3 - # config: - # bucket: thanos - # endpoint: thanos-minio.thanos.svc.cluster.local:9000 - # access_key: "thanos" - # secret_key: "en to tre fire" - # insecure: true - - ## @param indexCacheConfig The [index cache configuration](https://thanos.io/components/store.md/) - ## Specify content for index-cache.yml - indexCacheConfig: "" - ## @param bucketCacheConfig The [bucket cache configuration](https://thanos.io/components/store.md/) - ## Specify content for bucket-cache.yml - ## - bucketCacheConfig: "" - ## @param existingObjstoreSecret Secret with Objstore Configuration - ## Note: This will override objstoreConfig - ## - existingObjstoreSecret: "thanos-objstore-secret" - existingObjstoreSecretItems: [] - existingServiceAccount: "" - - query: - enabled: true - stores: - - {{ .Values.prometheus.fullname | default "prometheus-kube-prometheus" }}-prometheus.prometheus.svc:10901 - - thanos-envoy:10000 - - thanos-envoy:10002 - - thanos-envoy:11000 - ingress: - enabled: true - certManager: false - hostname: thanos.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos.{{ .Values.cluster_config.domain }} - secretName: thanos-tls - - ## @section Thanos Query Frontend parameters - - queryFrontend: - enabled: true - ingress: - enabled: true - certManager: false - hostname: thanos-query.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-query.{{ .Values.cluster_config.domain }} - secretName: thanos-query-tls - - ## @section Thanos Bucket Web parameters - - bucketweb: - enabled: true - ingress: - enabled: true - certManager: false - hostname: thanos-bucketweb.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos-bucketweb.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-bucketweb.{{ .Values.cluster_config.domain }} - secretName: thanos-bucketweb-tls - - ## @section Thanos Compactor parameters - - compactor: - enabled: true - ingress: - enabled: true - certManager: false - hostname: thanos-compactor.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-compactor.{{ .Values.cluster_config.domain }} - secretName: thanos-compactor-tls - persistence: - enabled: true - storageClass: "local-storage" - accessModes: - - ReadWriteOnce - size: 8Gi - - ## @section Thanos Store Gateway parameters - - storegateway: - enabled: true - - ingress: - enabled: true - certManager: false - hostname: thanos-storage.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-storage.{{ .Values.cluster_config.domain }} - secretName: thanos-storage-tls - persistence: - enabled: true - storageClass: "local-storage" - accessModes: - - ReadWriteOnce - size: 8Gi - - ## @section Thanos Ruler parameters - - ruler: - enabled: true - alertmanagers: - - https://alertmanager.k1.itpartner.no - - https://alertmanager.k2.itpartner.no - - https://alertmanager.k0.itpartner.no - config: |- - groups: - - name: "metamonitoring" - rules: - - alert: "PrometheusDown" - expr: absent(up{container="prometheus",job="prometheus-kube-prometheus-prometheus",namespace="prometheus"}) - global: - resolve_timeout: 5m - route: - receiver: pagerduty - group_by: - - alertname - routes: - - receiver: snitch - match: - alertname: Watchdog - group_wait: 0s - group_interval: 1m - repeat_interval: 50s - group_wait: 60s - group_interval: 15m - repeat_interval: 24h - receivers: - - name: pagerduty - pagerduty_configs: - - routing_key: e67f3a24f11c450ad060128f20ffa5d1 - url: https://events.pagerduty.com/v2/enqueue - - ingress: - enabled: true - certManager: false - hostname: thanos-ruler.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-ruler.{{ .Values.cluster_config.domain }} - secretName: thanos-ruler-tls - persistence: - enabled: true - storageClass: "local-storage" - accessModes: - - ReadWriteOnce - size: 8Gi - - ## @section Thanos Receive parameters - - receive: - enabled: false - mode: standalone - replicationFactor: 1 - replicaLabel: replica - tsdbRetention: 15d - config: - - endpoints: - - "127.0.0.1:10901" - ingress: - enabled: true - certManager: false - hostname: thanos-receive.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-receive.{{ .Values.cluster_config.domain }} - secretName: thanos-receive-tls - persistence: - enabled: true - storageClass: "local-storage" - accessModes: - - ReadWriteOnce - size: 8Gi - - ## @section Metrics parameters - - metrics: - enabled: true - serviceMonitor: - enabled: true - - ## @section MinIO® chart parameters - - minio: - enabled: true - accessKey: - password: "thanos" - secretKey: - password: "en to tre fire" - defaultBuckets: thanos - ingress: - enabled: true - certManager: false - hostname: thanos-minio.{{ .Values.cluster_config.domain }} - ingressClassName: "nginx" - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/proxy-body-size: 1024m - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.19.255.0/24 - ## extraHosts: - ## - name: thanos.local - ## path: / - ## pathType: ImplementationSpecific - ## - extraHosts: [] - extraTls: - - hosts: - - thanos-minio.{{ .Values.cluster_config.domain }} - secretName: thanos-minio-tls - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.prometheus.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/prometheus.yaml b/attic/templates/prometheus.yaml deleted file mode 100644 index 3b4ad8d7..00000000 --- a/attic/templates/prometheus.yaml +++ /dev/null @@ -1,625 +0,0 @@ -{{- if .Values.prometheus.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prometheus - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: prometheus - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/prometheus - targetRevision: HEAD - - repoURL: 'https://prometheus-community.github.io/helm-charts' - targetRevision: '{{ .Values.prometheus.version }}' - chart: kube-prometheus-stack - helm: - skipCrds: true - values: | - crds: - enabled: false - - fullnameOverride: {{ .Values.prometheus.fullname | default "prometheus-kube-prometheus" }} - - {{- with .Values.prometheus.defaultRules }} - defaultRules: - {{- . | toYaml | nindent 10 }} - {{- end}} - - ## Configuration for alertmanager - ## ref: https://prometheus.io/docs/alerting/alertmanager/ - ## - alertmanager: - config: - route: - {{- if .Values.prometheus.alert_group_by }} - group_by: - {{- range .Values.prometheus.alert_group_by }} - - {{ . | quote }} - {{- end }} - {{- else }} - group_by: ["alertname"] - {{- end }} - group_wait: 60s - group_interval: 15m - repeat_interval: 24h - receiver: {{ .Values.prometheus.alert_receiver | default "pagerduty" }} - routes: - - match: - alertname: Watchdog - group_wait: 0s - group_interval: 1m - repeat_interval: 50s - receiver: snitch - {{- if .Values.prometheus.oncallUrl}} - - match: - alertname: .* - receiver: oncall - continue: true - {{- end }} - receivers: - - name: pagerduty - pagerduty_configs: - - routing_key: {{ default "key" .Values.prometheus.pagerdutyRoutingKey }} - url: "https://events.pagerduty.com/v2/enqueue" - severity: {{`'{{ if .CommonLabels.severity }}{{ .CommonLabels.severity | toLower }}{{ else }}critical{{ end }}'`}} - {{- if .Values.prometheus.snitchUrl}} - - name: snitch - webhook_configs: - - url: "{{ .Values.prometheus.snitchUrl }}" - send_resolved: false - {{- end }} - - name: teams - webhook_configs: - - url: "https://prometheus-msteams.{{ .Values.cluster_config.domain }}/{{ .Values.cluster_config.cluster }}" - http_config: - tls_config: - insecure_skip_verify: true - {{- if .Values.prometheus.oncallUrl}} - - name: oncall - webhook_configs: - - url: "{{ .Values.prometheus.oncallUrl }}" - send_resolved: true - {{- end }} - - storage: {} - - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - hosts: - - alertmanager.{{ .Values.cluster_config.domain }} - paths: - - / - pathType: ImplementationSpecific - tls: - - secretName: alertmanager-general-tls - hosts: - - alertmanager.{{ .Values.cluster_config.domain }} - - ingressPerReplica: - pathType: ImplementationSpecific - - alertmanagerSpec: - affinity: {} - # nodeAffinity: - # requiredDuringSchedulingIgnoredDuringExecution: - # nodeSelectorTerms: - # - matchExpressions: - # - key: kubernetes.io/hostname - # operator: In - # values: - # - {{ .Values.cluster_config.cluster }}-0.itpartner.intern - - tolerations: [] - # - key: unschedulable - # operator: Exists - # effect: NoSchedule - - grafana: - defaultDashboardsEnabled: {{ .Values.prometheus.grafana.defaultDashboardsEnabled }} - {{- if .Values.prometheus.grafana.plugins }} - plugins: - {{- range .Values.prometheus.grafana.plugins }} - - {{ . }} - {{- end }} - {{- end }} - grafana.ini: - server: - root_url: "https://grafana.{{.Values.cluster_config.domain}}:443" - security: - allow_embedding: "true" - auth: - disable_login_form: "{{ .Values.prometheus.grafana.disable_login_form }}" - users: - auto_assign_org_role: "Admin" - {{- range .Values.cluster_config.oidc }} - {{- if eq .provider "azuread" }} - auth.{{ .provider }}: - enabled: true - name: {{ .name }} - client_id: $__file{/etc/secrets/oauth/{{ .name }}/client_id} - client_secret: $__file{/etc/secrets/oauth/{{ .name }}/client_secret} - scopes: openid email profile - auth_url: https://login.microsoftonline.com/{{ .tenant }}/oauth2/v2.0/authorize - token_url: https://login.microsoftonline.com/{{ .tenant }}/oauth2/v2.0/token - allowed_groups: {{ .group_id }} - allow_sign_up: true - role_attribute_strict: false - allow_assign_grafana_admin: true - {{- else if eq .provider "github" }} - auth.{{ .provider }}: - name: {{ .name }} - enabled: true - client_id: $__file{/etc/secrets/oauth/{{ .name }}/client_id} - client_secret: $__file{/etc/secrets/oauth/{{ .name }}/client_secret} - allowed_organizations: {{ .allowed_organizations }} - {{- if .allowed_teams }} - allowed_teams: "{{ .allowed_teams }}" - {{- end }} - scopes: user:email,read:org - auth_url: https://github.com/login/oauth/authorize - token_url: https://github.com/login/oauth/access_token - allow_sign_up: true - role_attribute_strict: false - allow_assign_grafana_admin: true - {{- end }} - {{- end }} - extraSecretMounts: - {{- range .Values.cluster_config.oidc }} - - name: {{ .name }} - secretName: {{ .secret_ref.name }} - defaultMode: 0440 - mountPath: /etc/secrets/oauth/{{ .name }} - readOnly: true - {{- end }} - - {{- if .Values.prometheus.grafana.persistence }} - persistence: - enabled: true - size: 10Gi - {{- end }} - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips}} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - hosts: - - grafana.{{ .Values.cluster_config.domain }} - path: / - tls: - - secretName: grafana-general-tls - hosts: - - grafana.{{ .Values.cluster_config.domain }} - sidecar: - dashboards: - enabled: true - label: grafana_dashboard - folderAnnotation: grafana_folder - annotations: {} - multicluster: - global: - enabled: true - etcd: - enabled: false - provider: - allowUiUpdates: false - foldersFromFilesStructure: true - {{- if .Values.prometheus.thanos.datasource.enabled }} - datasources: - enabled: true - defaultDatasourceEnabled: true - url: http://thanos-query-frontend.thanos.svc:9090/ - # defaultDatasourceScrapeInterval: 15s - annotations: {} - - ## Create datasource for each Pod of Prometheus StatefulSet; - ## this uses headless service `prometheus-operated` which is - ## created by Prometheus Operator - ## ref: https://git.io/fjaBS - createPrometheusReplicasDatasources: false - label: grafana_datasource - {{ end }} - {{- if or .Values.loki.enabled .Values.prometheus.additionalDataSources }} - additionalDataSources: - {{- end }} - {{- if .Values.tempo.enabled }} - - name: Tempo - type: tempo - uid: tempo - orgId: 1 - url: http://tempo.tempo:3100 - isDefault: false - version: 1 - access: proxy - jsonData: - nodeGraph: - enabled: true - serviceMap: - datasourceUid: 'Prometheus' - tracesToLogs: - datasourceUid: loki - filterByTraceID: false - spanEndTimeShift: "500ms" - spanStartTimeShift: "-500ms" - timeInterval: 30s - {{- end }} - {{- if .Values.loki.enabled }} - - name: loki - type: loki - uid: loki - access: proxy - basicAuth: false - editable: false - jsonData: - tlsSkipVerify: false - {{- if .Values.tempo.enabled }} - derivedFields: - - datasourceUid: tempo - matcherRegex: trace_id - matcherType: label - name: Trace ID - url: $${__value.raw} - urlDisplayLabel: 'Trace ID: $${__value.raw}' - {{- end }} - orgId: 1 - url: http://loki-read-headless.loki:3100 - version: 1 - {{- end }} - {{- with .Values.prometheus.additionalDataSources }} - {{- toYaml . | nindent 10 }} - {{- end }} - - kubeApiServer: - tlsConfig: - serverName: kubernetes - insecureSkipVerify: true - - kubelet: - serviceMonitor: - https: {{ .Values.prometheus.kubelet.https }} - cAdvisor: true - - # NOTE(simkir): Including throttling seconds by setting this. We use that in some dashboards, and could be useful - ## MetricRelabelConfigs to apply to samples after scraping, but before ingestion. - ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#relabelconfig - ## - cAdvisorMetricRelabelings: - # Drop less useful container CPU metrics. - - sourceLabels: [__name__] - action: drop - regex: 'container_cpu_(load_average_10s|system_seconds_total|user_seconds_total)' - # Drop less useful container / always zero filesystem metrics. - - sourceLabels: [__name__] - action: drop - regex: 'container_fs_(io_current|io_time_seconds_total|io_time_weighted_seconds_total|reads_merged_total|sector_reads_total|sector_writes_total|writes_merged_total)' - # Drop less useful / always zero container memory metrics. - - sourceLabels: [__name__] - action: drop - regex: 'container_memory_(mapped_file|swap)' - # Drop less useful container process metrics. - - sourceLabels: [__name__] - action: drop - regex: 'container_(file_descriptors|tasks_state|threads_max)' - # Drop container_memory_failures_total{scope="hierarchy"} metrics, - # we only need the container scope. - - sourceLabels: [__name__, scope] - action: drop - regex: 'container_memory_failures_total;hierarchy' - # Drop container_network_... metrics that match various interfaces that - # correspond to CNI and similar interfaces. This avoids capturing network - # metrics for host network containers. - - sourceLabels: [__name__, interface] - action: drop - regex: 'container_network_.*;(cali|cilium|cni|lxc|nodelocaldns|tunl).*' - # Drop container spec metrics that overlap with kube-state-metrics. - - sourceLabels: [__name__] - action: drop - regex: 'container_spec.*' - # Drop cgroup metrics with no pod. - - sourceLabels: [id, pod] - action: drop - regex: '.+;' - # - sourceLabels: [__name__, image] - # separator: ; - # regex: container_([a-z_]+); - # replacement: $1 - # action: drop - # - sourceLabels: [__name__] - # separator: ; - # regex: container_(network_tcp_usage_total|network_udp_usage_total|tasks_state|cpu_load_average_10s) - # replacement: $1 - # action: drop - - kubeControllerManager: - enabled: false - {{- if .Values.cluster_config.apiserverip }} - endpoints: - - {{ .Values.cluster_config.apiserverip }} - {{- end }} - service: - port: 10252 - selector: - k8s-app: kube-controller-manager - serviceMonitor: - enabled: true - https: true - insecureSkipVerify: true - - coreDns: - enabled: true - service: - targetPort: {{ .Values.prometheus.coredns.targetPort | default 10055 }} - selector: - k8s-app: kube-dns - - kubeEtcd: - enabled: true - {{- if .Values.cluster_config.etcd_nodes }} - endpoints: {{ .Values.cluster_config.etcd_nodes }} - {{- end }} - service: - port: {{ .Values.prometheus.etcd.targetPort | default 2379 }} - targetPort: {{ .Values.prometheus.etcd.targetPort | default 2379 }} - serviceMonitor: - enabled: true - scheme: https - insecureSkipVerify: true - caFile: /etc/prometheus/secrets/etcd-client-cert/ca.pem - certFile: /etc/prometheus/secrets/etcd-client-cert/etcd.pem - keyFile: /etc/prometheus/secrets/etcd-client-cert/etcd-key.pem - - kubeScheduler: - enabled: false - {{- if .Values.cluster_config.apiserverip }} - endpoints: - - {{ .Values.cluster_config.apiserverip }} - {{- end }} - service: - port: {{ .Values.prometheus.scheduler.targetPort | default 10251 }} - targetPort: {{ .Values.prometheus.scheduler.targetPort | default 10251 }} - selector: - k8s-app: kube-scheduler - - kubeProxy: - enabled: false - {{- if .Values.cluster_config.k8s_nodes }} - endpoints: {{ .Values.cluster_config.k8s_nodes }} - {{- else }} - service: - selector: - k8s-app: kube-proxy - {{- end }} - - prometheusOperator: - enabled: true - - admissionWebhooks: - certManager: - enabled: true - issuerRef: - name: "ca-issuer" - kind: "ClusterIssuer" - - kubeletService: - enabled: {{ .Values.prometheus.kubelet.enabled }} - - prometheus: - enabled: true - {{- if .Values.otel.enabled }} - enableRemoteWriteReceiver: true - {{- end }} - - thanosService: - enabled: false - type: ClusterIP - - ## gRPC port config - portName: grpc - port: 10901 - targetPort: "grpc" - - ## HTTP port config (for metrics) - httpPortName: http - httpPort: 10902 - targetHttpPort: "http" - - # Default is to make this a headless service ("None") - # clusterIP: "None" - - ## Port to expose on each node, if service type is NodePort - ## - nodePort: 30901 - httpNodePort: 30902 - - {{- if .Values.prometheus.thanos.enabled }} - # ServiceMonitor to scrape Sidecar metrics - # Needs thanosService to be enabled as well - thanosServiceMonitor: - enabled: true - interval: "" - - thanosIngress: - enabled: true - servicePort: 10901 - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/backend-protocol: "GRPC" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - kubernetes.io/ingress.allow-http: "false" - hosts: - - thanos-gateway.{{ .Values.cluster_config.domain }} - paths: - - / - pathType: ImplementationSpecific - tls: - - secretName: thanos-gateway-tls - hosts: - - thanos-gateway.{{ .Values.cluster_config.domain }} - {{- end }} - - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - hosts: - - prometheus.{{ .Values.cluster_config.domain }} - paths: - - / - pathType: ImplementationSpecific - tls: - - secretName: prometheus-general-tls - hosts: - - prometheus.{{ .Values.cluster_config.domain }} - - ingressPerReplica: - enabled: false - pathType: ImplementationSpecific - - prometheusSpec: - tolerations: [] - # - key: unschedulable - # operator: Exists - # effect: NoSchedule - secrets: - - etcd-client-cert - storageSpec: - volumeClaimTemplate: - spec: - accessModes: ["ReadWriteOnce"] - resources: - requests: - storage: {{ .Values.prometheus.storage.size }} - {{- with .Values.prometheus.enableFeatures}} - enableFeatures: - {{- range . }} - - {{ . }} - {{- end }} - {{- end }} - - ## External labels to add to any time series or alerts when communicating with external systems - ## - externalLabels: - cluster: {{ .Values.cluster_config.cluster }} - - ## Name of the external label used to denote replica name - ## - replicaExternalLabelName: "" - - ## If true, the Operator won't add the external label used to denote replica name - ## - replicaExternalLabelNameClear: true - - ## Name of the external label used to denote Prometheus instance name - ## - prometheusExternalLabelName: "" - - ## If true, the Operator won't add the external label used to denote Prometheus instance name - ## - prometheusExternalLabelNameClear: true - - serviceMonitorSelectorNilUsesHelmValues: false - podMonitorSelectorNilUsesHelmValues: false - ruleSelectorNilUsesHelmValues: false - - ## Thanos configuration allows configuring various aspects of a Prometheus server in a Thanos environment. - ## This section is experimental, it may change significantly without deprecation notice in any release. - ## This is experimental and may change significantly without backward compatibility in any release. - ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#thanosspec - ## - {{- if .Values.prometheus.thanos.enabled }} - thanos: - objectStorageConfig: - key: thanos.yaml - name: thanos-objstore-config - {{- end }} - # remoteWrite: - # - url: https://thanos-receive.k1.itpartner.no/api/v1/receive - # name: {{ .Values.cluster_config.cluster }} - {{- with .Values.prometheus.additionalScrapeConfigs}} - additionalScrapeConfigs: - {{- toYaml . | nindent 12 }} - {{- end }} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - ServerSideApply=true - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.prometheus.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} - ignoreDifferences: - - group: apps - kind: Deployment - jqPathExpressions: - - '.spec.template.spec.containers[]?.resources' - - group: monitoring.coreos.com - kind: ServiceMonitor - jqPathExpressions: - - '.spec.endpoints[]?.relabelings' - - group: admissionregistration.k8s.io - kind: MutatingWebhookConfiguration - jqPathExpressions: - - '.webhooks[]?.clientConfig.caBundle' - - group: admissionregistration.k8s.io - kind: ValidatingWebhookConfiguration - jqPathExpressions: - - '.webhooks[]?.clientConfig.caBundle' ---- -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prometheus-crd - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "-1" - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: prometheus - server: 'https://kubernetes.default.svc' - source: - repoURL: 'https://prometheus-community.github.io/helm-charts' - targetRevision: '{{ .Values.prometheus.crd_version }}' - chart: prometheus-operator-crds - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - automated: {} - syncOptions: - - ServerSideApply=true - - CreateNamespace=true - - ApplyOutOfSyncOnly=true -{{- end }} diff --git a/attic/templates/promtail.yaml b/attic/templates/promtail.yaml deleted file mode 100644 index c2602d57..00000000 --- a/attic/templates/promtail.yaml +++ /dev/null @@ -1,50 +0,0 @@ -{{ if .Values.promtail.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: promtail - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: loki - server: 'https://kubernetes.default.svc' - sources: - #- repoURL: {{ .Values.cluster_config.manifests }} - # path: {{ .Values.cluster_config.policies }}/promtail - # targetRevision: HEAD - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: {{ .Values.promtail.version }} - chart: promtail - helm: - values: | - config: - snippets: - pipelineStages: - - labelallow: - - app - - app_kubernetes_io_component - - app_kubernetes_io_instance - - app_kubernetes_io_version - - container - - instance - - namespace - - pod - - stream - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.promtail.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/rabbitmq-operator.yaml b/attic/templates/rabbitmq-operator.yaml deleted file mode 100644 index 1b39a4c0..00000000 --- a/attic/templates/rabbitmq-operator.yaml +++ /dev/null @@ -1,60 +0,0 @@ -{{ if .Values.rabbitmq_operator.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: rabbitmq-operator - namespace: argocd -spec: - destination: - namespace: rabbitmq - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/rabbitmq - targetRevision: HEAD - - repoURL: 'https://charts.bitnami.com/bitnami' - targetRevision: {{ .Values.rabbitmq_operator.version }} - chart: rabbitmq-cluster-operator - helm: - # NOTE(mrtz): Also add metrics for topology operator? - values: | - fullnameOverride: rabbitmq-operator - additionalArgs: [] - useCertManager: true - {{ if .Values.rabbitmq_operator.metrics }} - clusterOperator: - metrics: - service: - enabled: true - serviceMonitor: - enabled: true - podMonitor: - enabled: true - {{ end }} - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - - ServerSideApply=true - {{- if .Values.rabbitmq_operator.version }} - automated: - prune: true - # selfHeal: false - ignoreDifferences: - - group: "" - kind: Secret - name: rabbitmq-operator-messaging-topology-operator-webhook - jsonPointers: - - /data/ca.crt - - /data/tls.crt - - /data/tls.key - - group: admissionregistration.k8s.io - kind: ValidatingWebhookConfiguration - jqPathExpressions: - - '.webhooks[]?.clientConfig.caBundle' - {{- end }} -{{ end }} diff --git a/attic/templates/rabbitmq.yaml b/attic/templates/rabbitmq.yaml deleted file mode 100644 index 418dbd50..00000000 --- a/attic/templates/rabbitmq.yaml +++ /dev/null @@ -1,36 +0,0 @@ -{{- if .Values.rabbitmq.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: ApplicationSet -metadata: - name: rabbitmq - namespace: argocd -spec: - generators: - - list: - elements: - - cluster: https://kubernetes.default.svc - env: prod - hostname: rabbitmq.srv.oceanbox.io - - cluster: https://kubernetes.default.svc - env: staging - hostname: rabbitmq.beta.oceanbox.io - template: - metadata: - name: '{{- env }}-rabbitmq' - spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: rabbitmq - sources: - - repoURL: https://charts.bitnami.com/bitnami - targetRevision: 12.9.0 - chart: rabbitmq - helm: - valueFiles: - - $values/values/rabbitmq/values-{{- env }}.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/rabbitmq/{{- env }} - ref: values -{{- end }} diff --git a/attic/templates/redis.yaml b/attic/templates/redis.yaml deleted file mode 100644 index 83eccd76..00000000 --- a/attic/templates/redis.yaml +++ /dev/null @@ -1,30 +0,0 @@ -{{- if .Values.redis.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-redis - namespace: argocd -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: redis - sources: - - repoURL: https://charts.bitnami.com/bitnami - targetRevision: 19.5.2 - chart: redis - helm: - valueFiles: - - $values/values/redis/values-prod.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: HEAD - ref: values - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/redis/prod - ignoreDifferences: - - group: apps - kind: StatefulSet - jqPathExpressions: - - '.spec.template.spec.containers[].resources.limits.cpu' -{{- end }} diff --git a/attic/templates/resources/cluster-auth-rbac.yaml b/attic/templates/resources/cluster-auth-rbac.yaml deleted file mode 100644 index ee655308..00000000 --- a/attic/templates/resources/cluster-auth-rbac.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: cluster-admin - namespace: kube-system ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: cluster-admin -roleRef: - kind: ClusterRole - name: cluster-admin - apiGroup: rbac.authorization.k8s.io -subjects: -- kind: ServiceAccount - namespace: kube-system - name: cluster-admin -- apiGroup: rbac.authorization.k8s.io - kind: Group - name: 'system:masters' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: system-default -roleRef: - kind: ClusterRole - name: cluster-admin - apiGroup: rbac.authorization.k8s.io -subjects: -- kind: ServiceAccount - namespace: kube-system - name: default ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: kubernetes -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: -- apiGroup: rbac.authorization.k8s.io - kind: User - name: kubernetes diff --git a/attic/templates/resources/dashboards/argocd.yaml b/attic/templates/resources/dashboards/argocd.yaml deleted file mode 100644 index ffdb9ae5..00000000 --- a/attic/templates/resources/dashboards/argocd.yaml +++ /dev/null @@ -1,4260 +0,0 @@ -apiVersion: v1 -data: - argocd.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 68, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Overview", - "type": "row" - }, - { - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 4, - "w": 2, - "x": 0, - "y": 1 - }, - "id": 26, - "links": [], - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "![argoimage](https://avatars1.githubusercontent.com/u/30269780?s=110&v=4)", - "mode": "markdown" - }, - "pluginVersion": "9.2.4", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "transparent": true, - "type": "text" - }, - { - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "dtdurations" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 2, - "y": 1 - }, - "id": 32, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.2.4", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "time() - max(process_start_time_seconds{job=\"argocd-server-metrics\",namespace=~\"$namespace\"})", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Uptime", - "type": "stat" - }, - { - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "rgb(31, 120, 193)", - "mode": "fixed" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "0" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 5, - "y": 1 - }, - "id": 94, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "none", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.2.4", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "count(count by (server) (argocd_cluster_info{namespace=~\"$namespace\"}))", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Clusters", - "type": "stat" - }, - { - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "rgb(31, 120, 193)", - "mode": "fixed" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 8, - "y": 1 - }, - "id": 75, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "none", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.2.4", - "repeatDirection": "h", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_app_info{namespace=~\"$namespace\",dest_server=~\"$cluster\",health_status=~\"$health_status\",sync_status=~\"$sync_status\"})", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Applications", - "type": "stat" - }, - { - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "rgb(31, 120, 193)", - "mode": "fixed" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "0" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 11, - "y": 1 - }, - "id": 107, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "none", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.2.4", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "count(count by (repo) (argocd_app_info{namespace=~\"$namespace\"}))", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Repositories", - "type": "stat" - }, - { - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "id": 0, - "op": "=", - "text": "0", - "type": 1, - "value": "null" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 14, - "y": 1 - }, - "id": 100, - "links": [], - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "9.2.4", - "repeatDirection": "h", - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_app_info{namespace=~\"$namespace\",dest_server=~\"$cluster\",operation!=\"\"})", - "format": "time_series", - "instant": true, - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Operations", - "type": "gauge" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 4, - "w": 7, - "x": 17, - "y": 1 - }, - "hiddenSeries": false, - "id": 28, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_app_info{namespace=~\"$namespace\",dest_server=~\"$cluster\",health_status=~\"$health_status\",sync_status=~\"$sync_status\"}) by (namespace)", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Applications", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 77, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Application Status", - "type": "row" - }, - { - "aliasColors": { - "Degraded": "semi-dark-red", - "Healthy": "green", - "Missing": "semi-dark-purple", - "Progressing": "semi-dark-blue", - "Suspended": "semi-dark-orange", - "Unknown": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 12, - "x": 0, - "y": 6 - }, - "hiddenSeries": false, - "id": 105, - "interval": "", - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_app_info{namespace=~\"$namespace\",dest_server=~\"$cluster\",health_status=~\"$health_status\",sync_status=~\"$sync_status\",health_status!=\"\"}) by (health_status)", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{`{{health_status}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Health Status", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 2, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": { - "Degraded": "semi-dark-red", - "Healthy": "green", - "Missing": "semi-dark-purple", - "OutOfSync": "semi-dark-yellow", - "Progressing": "semi-dark-blue", - "Suspended": "semi-dark-orange", - "Synced": "semi-dark-green", - "Unknown": "rgb(255, 255, 255)" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 12, - "x": 12, - "y": 6 - }, - "hiddenSeries": false, - "id": 106, - "interval": "", - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_app_info{namespace=~\"$namespace\",dest_server=~\"$cluster\",health_status=~\"$health_status\",sync_status=~\"$sync_status\",health_status!=\"\"}) by (sync_status)", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{`{{sync_status}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Sync Status", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 2, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 104, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Sync Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 13 - }, - "hiddenSeries": false, - "id": 56, - "interval": "", - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "total", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 1, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(round(increase(argocd_app_sync_total{namespace=~\"$namespace\",dest_server=~\"$cluster\"}[$interval]))) by ($grouping)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{$grouping}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Sync Activity", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "decimals": -12, - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 24, - "x": 0, - "y": 19 - }, - "hiddenSeries": false, - "id": 73, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "hideEmpty": true, - "hideZero": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "total", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(round(increase(argocd_app_sync_total{namespace=~\"$namespace\",phase=~\"Error|Failed\",dest_server=~\"$cluster\"}[$interval]))) by ($grouping, phase)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{phase}}`}}: {{`{{$grouping}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Sync Failures", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "none", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 24 - }, - "id": 64, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Controller Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 25 - }, - "hiddenSeries": false, - "id": 58, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "total", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_app_reconcile_count{namespace=~\"$namespace\",dest_server=~\"$cluster\"}[$interval])) by ($grouping)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{$grouping}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Reconciliation Activity", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateSpectral", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 31 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 60, - "legend": { - "show": true - }, - "links": [], - "options": { - "calculate": false, - "calculation": {}, - "cellGap": 2, - "cellValues": { - "decimals": 0 - }, - "color": { - "exponent": 0.5, - "fill": "#b4ff00", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "Spectral", - "steps": 128 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": true - }, - "rowsFrame": { - "layout": "auto" - }, - "showValue": "never", - "tooltip": { - "show": true, - "yHistogram": true - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "short" - } - }, - "pluginVersion": "9.2.4", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_app_reconcile_bucket{namespace=~\"$namespace\"}[$interval])) by (le)", - "format": "heatmap", - "instant": false, - "intervalFactor": 10, - "legendFormat": "{{`{{le}}`}}", - "refId": "A" - } - ], - "title": "Reconciliation Performance", - "tooltip": { - "show": true, - "showHistogram": true - }, - "tooltipDecimals": 0, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "format": "short", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 38 - }, - "hiddenSeries": false, - "id": 80, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_app_k8s_request_total{namespace=~\"$namespace\",server=~\"$cluster\"}[$interval])) by (verb, resource_kind)", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "legendFormat": "{{`{{verb}}`}} {{`{{resource_kind}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "K8s API Activity", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 44 - }, - "hiddenSeries": false, - "id": 96, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideZero": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(workqueue_depth{namespace=~\"$namespace\",name=~\"app_.*\"}) by (name)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{name}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Workqueue Depth", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "min": "0", - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 44 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideZero": false, - "max": true, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_kubectl_exec_pending{namespace=~\"$namespace\"}) by (command)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{command}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Pending kubectl run", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "decimals": 0, - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 51 - }, - "id": 102, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Controller Telemetry", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 52 - }, - "hiddenSeries": false, - "id": 34, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "editorMode": "code", - "expr": "go_memstats_heap_alloc_bytes{job=~\"argocd-application-controller-metrics|argocd-applicationset-controller-metrics\",namespace=\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "range": true, - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Memory Usage", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 59 - }, - "hiddenSeries": false, - "id": 108, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "editorMode": "code", - "expr": "irate(process_cpu_seconds_total{job=~\"argocd-notifications-controller-metrics|argocd-applicationset-controller-metrics\",namespace=~\"$namespace\"}[1m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "range": true, - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "CPU Usage", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 1, - "format": "none", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 66 - }, - "hiddenSeries": false, - "id": 62, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "editorMode": "code", - "expr": "go_goroutines{job=~\"argocd-application-controller-metrics|argocd-applicationset-controller-metrics\",namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "range": true, - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Goroutines", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 73 - }, - "id": 88, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Cluster Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 74 - }, - "hiddenSeries": false, - "id": 90, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(argocd_cluster_api_resource_objects{namespace=~\"$namespace\",server=~\"$cluster\"}) by (server)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{server}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Resource Objects Count", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 81 - }, - "hiddenSeries": false, - "id": 92, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": " sum(argocd_cluster_api_resources{namespace=~\"$namespace\",server=~\"$cluster\"}) by (server)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{server}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "API Resources Count", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 87 - }, - "hiddenSeries": false, - "id": 86, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_cluster_events_total{namespace=~\"$namespace\",server=~\"$cluster\"}[$interval])) by (server)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{server}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Cluster Events Count", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 94 - }, - "id": 70, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Repo Server Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 95 - }, - "hiddenSeries": false, - "id": 82, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_git_request_total{request_type=\"ls-remote\", namespace=~\"$namespace\"}[10m])) by (namespace)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Git Requests (ls-remote)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 95 - }, - "hiddenSeries": false, - "id": 84, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_git_request_total{request_type=\"fetch\", namespace=~\"$namespace\"}[10m])) by (namespace)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{namespace}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Git Requests (checkout)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateSpectral", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 103 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 114, - "legend": { - "show": false - }, - "options": { - "calculate": false, - "calculation": {}, - "cellGap": 2, - "cellValues": {}, - "color": { - "exponent": 0.5, - "fill": "#b4ff00", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "Spectral", - "steps": 128 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": false - }, - "rowsFrame": { - "layout": "auto" - }, - "showValue": "never", - "tooltip": { - "show": true, - "yHistogram": false - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "short" - } - }, - "pluginVersion": "9.2.4", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_git_request_duration_seconds_bucket{request_type=\"fetch\", namespace=~\"$namespace\"}[$interval])) by (le)", - "format": "heatmap", - "intervalFactor": 10, - "legendFormat": "{{`{{le}}`}}", - "refId": "A" - } - ], - "title": "Git Fetch Performance", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "format": "short", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateSpectral", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": { - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 103 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 116, - "legend": { - "show": false - }, - "options": { - "calculate": false, - "calculation": {}, - "cellGap": 2, - "cellValues": {}, - "color": { - "exponent": 0.5, - "fill": "#b4ff00", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "Spectral", - "steps": 128 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": false - }, - "rowsFrame": { - "layout": "auto" - }, - "showValue": "never", - "tooltip": { - "show": true, - "yHistogram": false - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "short" - } - }, - "pluginVersion": "9.2.4", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(argocd_git_request_duration_seconds_bucket{request_type=\"ls-remote\", namespace=~\"$namespace\"}[$interval])) by (le)", - "format": "heatmap", - "intervalFactor": 10, - "legendFormat": "{{`{{le}}`}}", - "refId": "A" - } - ], - "title": "Git Ls-Remote Performance", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "format": "short", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 111 - }, - "hiddenSeries": false, - "id": 71, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "editorMode": "code", - "expr": "go_memstats_heap_alloc_bytes{job=\"argocd-repo-server-metrics\",namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{pod}}`}}", - "range": true, - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Memory Used", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 119 - }, - "hiddenSeries": false, - "id": 72, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "editorMode": "code", - "expr": "go_goroutines{job=\"argocd-repo-server-metrics\",namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{pod}}`}}", - "range": true, - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Goroutines", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "uid": "$datasource" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 126 - }, - "id": 66, - "panels": [], - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "refId": "A" - } - ], - "title": "Server Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 127 - }, - "hiddenSeries": false, - "id": 61, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "go_memstats_heap_alloc_bytes{job=\"argocd-server-metrics\",namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Memory Used", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 24, - "x": 0, - "y": 135 - }, - "hiddenSeries": false, - "id": 36, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "go_goroutines{job=\"argocd-server-metrics\",namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Goroutines", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 24, - "x": 0, - "y": 144 - }, - "hiddenSeries": false, - "id": 38, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "go_gc_duration_seconds{job=\"argocd-server-metrics\", quantile=\"1\", namespace=~\"$namespace\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "GC Time Quantiles", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "gridPos": { - "h": 2, - "w": 24, - "x": 0, - "y": 153 - }, - "id": 54, - "links": [], - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "#### gRPC Services:", - "mode": "markdown" - }, - "pluginVersion": "9.2.4", - "transparent": true, - "type": "text" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 155 - }, - "hiddenSeries": false, - "id": 40, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sort": "total", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"application.ApplicationService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "ApplicationService Requests", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 155 - }, - "hiddenSeries": false, - "id": 42, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"cluster.ClusterService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "ClusterService Requests", - "tooltip": { - "shared": false, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 164 - }, - "hiddenSeries": false, - "id": 44, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"project.ProjectService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "ProjectService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 164 - }, - "hiddenSeries": false, - "id": 46, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"repository.RepositoryService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "yaxis": "left" - } - ], - "timeRegions": [], - "title": "RepositoryService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 173 - }, - "hiddenSeries": false, - "id": 48, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"session.SessionService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "SessionService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 173 - }, - "hiddenSeries": false, - "id": 49, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"version.VersionService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "VersionService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 182 - }, - "hiddenSeries": false, - "id": 50, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"account.AccountService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "AccountService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "$datasource" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 182 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "uid": "$datasource" - }, - "expr": "sum(increase(grpc_server_handled_total{job=\"argocd-server-metrics\",grpc_service=\"settings.SettingsService\",namespace=~\"$namespace\"}[$interval])) by (grpc_code, grpc_method)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{`{{grpc_code}}`}},{{`{{grpc_method}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "SettingsService Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 191 - }, - "id": 110, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Redis Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 192 - }, - "hiddenSeries": false, - "id": 112, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.2.4", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum(increase(argocd_redis_request_total{namespace=~\"$namespace\"}[$interval])) by (failed)", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Requests by result", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - } - ], - "refresh": false, - "schemaVersion": 37, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": ".*", - "current": { - "selected": true, - "text": "argocd", - "value": "argocd" - }, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "definition": "label_values(kube_pod_info, namespace)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "namespace", - "options": [], - "query": { - "query": "label_values(kube_pod_info, namespace)", - "refId": "Prometheus-namespace-Variable-Query" - }, - "refresh": 1, - "regex": ".*argocd.*", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "auto": true, - "auto_count": 30, - "auto_min": "1m", - "current": { - "selected": false, - "text": "auto", - "value": "$__auto_interval_interval" - }, - "hide": 0, - "name": "interval", - "options": [ - { - "selected": true, - "text": "auto", - "value": "$__auto_interval_interval" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - }, - { - "selected": false, - "text": "10m", - "value": "10m" - }, - { - "selected": false, - "text": "30m", - "value": "30m" - }, - { - "selected": false, - "text": "1h", - "value": "1h" - }, - { - "selected": false, - "text": "2h", - "value": "2h" - }, - { - "selected": false, - "text": "4h", - "value": "4h" - }, - { - "selected": false, - "text": "8h", - "value": "8h" - } - ], - "query": "1m,5m,10m,30m,1h,2h,4h,8h", - "refresh": 2, - "skipUrlSync": false, - "type": "interval" - }, - { - "allValue": "", - "current": { - "selected": true, - "text": "namespace", - "value": "namespace" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "grouping", - "options": [ - { - "selected": true, - "text": "namespace", - "value": "namespace" - }, - { - "selected": false, - "text": "name", - "value": "name" - }, - { - "selected": false, - "text": "project", - "value": "project" - } - ], - "query": "namespace,name,project", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": ".*", - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "definition": "label_values(argocd_cluster_info, server)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "query": "label_values(argocd_cluster_info, server)", - "refId": "Prometheus-cluster-Variable-Query" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".*", - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "hide": 0, - "includeAll": true, - "multi": false, - "name": "health_status", - "options": [ - { - "selected": true, - "text": "All", - "value": "$__all" - }, - { - "selected": false, - "text": "Healthy", - "value": "Healthy" - }, - { - "selected": false, - "text": "Progressing", - "value": "Progressing" - }, - { - "selected": false, - "text": "Suspended", - "value": "Suspended" - }, - { - "selected": false, - "text": "Missing", - "value": "Missing" - }, - { - "selected": false, - "text": "Degraded", - "value": "Degraded" - }, - { - "selected": false, - "text": "Unknown", - "value": "Unknown" - } - ], - "query": "Healthy,Progressing,Suspended,Missing,Degraded,Unknown", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": ".*", - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "hide": 0, - "includeAll": true, - "multi": false, - "name": "sync_status", - "options": [ - { - "selected": true, - "text": "All", - "value": "$__all" - }, - { - "selected": false, - "text": "Synced", - "value": "Synced" - }, - { - "selected": false, - "text": "OutOfSync", - "value": "OutOfSync" - }, - { - "selected": false, - "text": "Unknown", - "value": "Unknown" - } - ], - "query": "Synced,OutOfSync,Unknown", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-30m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "ArgoCD", - "uid": "LCAgc9rWz", - "version": 1, - "weekStart": "" - } -kind: ConfigMap -metadata: - name: argocd-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" diff --git a/attic/templates/resources/dashboards/cnpg-postgres.yaml b/attic/templates/resources/dashboards/cnpg-postgres.yaml deleted file mode 100644 index 0b2b5007..00000000 --- a/attic/templates/resources/dashboards/cnpg-postgres.yaml +++ /dev/null @@ -1,3908 +0,0 @@ -{{- if .Values.postgres_operator.enabled }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: cnpg-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" - app.kubernetes.io/instance: prometheus-community - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: grafana - app.kubernetes.io/version: 9.1.7 - helm.sh/chart: grafana-6.40.4 -data: - cnp.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1637064390546, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 12, - "panels": [], - "title": "Server Health", - "type": "row" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 0, - "y": 1 - }, - "id": 191, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Instance", - "transparent": true, - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 2, - "x": 3, - "y": 1 - }, - "id": 192, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Status", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 4, - "x": 5, - "y": 1 - }, - "id": 193, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Clustering / replicas", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 5, - "x": 9, - "y": 1 - }, - "id": 195, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Connections", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 14, - "y": 1 - }, - "id": 196, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Max Connections", - "type": "text" - }, - { - "datasource": "${DataSource}", - "description": "", - "gridPos": { - "h": 1, - "w": 3, - "x": 17, - "y": 1 - }, - "id": 197, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Wraparound", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 2, - "x": 20, - "y": 1 - }, - "id": 313, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Started", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 2, - "x": 22, - "y": 1 - }, - "id": 198, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Server Version", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 2 - }, - "id": 61, - "options": { - "content": "\n \n

$instances

\n
", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "text" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "index": 0, - "text": "Down" - }, - "1": { - "index": 1, - "text": "Up" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 3, - "y": 2 - }, - "id": 33, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 1, - "text": "No" - }, - "1": { - "color": "green", - "index": 0, - "text": "Yes" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 5, - "y": 2 - }, - "id": 60, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "1 - cnpg_pg_replication_in_recovery{namespace=~\"$namespace\",pod=~\"$instances\"} + cnpg_pg_replication_is_wal_receiver_up{namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "transformations": [], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 7, - "y": 2 - }, - "id": 229, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_replication_streaming_replicas{namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "transformations": [], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 5, - "x": 9, - "y": 2 - }, - "id": 58, - "options": { - "legend": { - "calcs": [ - "last", - "mean" - ], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "sum by (pod) (cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"})", - "instant": false, - "interval": "", - "legendFormat": "-", - "refId": "A" - } - ], - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "max": 100, - "noValue": "<1%", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 75 - }, - { - "color": "red", - "value": 90 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 14, - "y": 2 - }, - "id": 32, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "100 * sum by (pod) (cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) / sum by (pod) (cnpg_pg_settings_setting{name=\"max_connections\",namespace=~\"$namespace\",pod=~\"$instances\"})", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "gauge" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 2147483647, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 200000000 - }, - { - "color": "red", - "value": 1000000000 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 17, - "y": 2 - }, - "id": 8, - "options": { - "displayMode": "lcd", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "text": {} - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "max by (pod) (cnpg_pg_database_xid_age{namespace=~\"$namespace\",pod=~\"$instances\"})", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "bargauge" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-blue", - "value": null - } - ] - }, - "unit": "dateTimeFromNow" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 20, - "y": 2 - }, - "id": 314, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": false, - "expr": "cnpg_pg_postmaster_start_time{namespace=~\"$namespace\",pod=~\"$instances\"}*1000", - "format": "time_series", - "hide": false, - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "transformations": [], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-blue", - "value": null - } - ] - }, - "unit": "string" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 22, - "y": 2 - }, - "id": 42, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": false, - "expr": "cnpg_collector_postgres_version{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "time_series", - "hide": false, - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "transformations": [], - "type": "stat" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 11 - }, - "id": 41, - "panels": [ - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 0, - "y": 6 - }, - "id": 187, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Instance", - "transparent": true, - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 3, - "y": 6 - }, - "id": 183, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Max Connections", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 6, - "y": 6 - }, - "id": 184, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Shared Buffers", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 9, - "y": 6 - }, - "id": 185, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Effective Cache Size", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 12, - "y": 6 - }, - "id": 186, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Work Mem", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 15, - "y": 6 - }, - "id": 188, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Maintenance Work Mem", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 18, - "y": 6 - }, - "id": 189, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Random Page Cost", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 3, - "x": 21, - "y": 6 - }, - "id": 190, - "options": { - "content": "", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Sequential Page Cost", - "type": "text" - }, - { - "datasource": "${DataSource}", - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 7 - }, - "id": 86, - "options": { - "content": "\n \n

$instances

\n
", - "mode": "html" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "text" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 3, - "y": 7 - }, - "id": 30, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"max_connections\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 6, - "y": 7 - }, - "id": 24, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "max by (pod) (cnpg_pg_settings_setting{name=\"shared_buffers\",namespace=~\"$namespace\",pod=~\"$instances\"}) * max by (pod) (cnpg_pg_settings_setting{name=\"block_size\",namespace=~\"$namespace\",pod=~\"$instances\"})", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 9, - "y": 7 - }, - "id": 57, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"effective_cache_size\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 12, - "y": 7 - }, - "id": 26, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"work_mem\",namespace=~\"$namespace\",pod=~\"$instances\"} * 1024", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 15, - "y": 7 - }, - "id": 47, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"maintenance_work_mem\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 18, - "y": 7 - }, - "id": 48, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"random_page_cost\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 21, - "y": 7 - }, - "id": 56, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.1", - "repeat": "instances", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{name=\"seq_page_cost\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "type": "stat" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "displayMode": "auto", - "filterable": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-purple", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 24, - "x": 0, - "y": 10 - }, - "id": 150, - "options": { - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "parameter" - } - ] - }, - "pluginVersion": "8.2.1", - "repeatDirection": "v", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_settings_setting{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Configurations", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "container": true, - "endpoint": true, - "instance": true, - "job": true, - "name": false, - "namespace": true, - "pod": false - }, - "indexByName": { - "Time": 0, - "Value": 9, - "__name__": 1, - "container": 2, - "endpoint": 3, - "instance": 4, - "job": 5, - "name": 7, - "namespace": 8, - "pod": 6 - }, - "renameByName": { - "__name__": "", - "name": "parameter" - } - } - } - ], - "type": "table" - } - ], - "title": "Configuration", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 10, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DataSource}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 7 - }, - "hiddenSeries": false, - "id": 273, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": true, - "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{pod=~\"$instances\", namespace=~\"$namespace\"}) by (pod)", - "format": "time_series", - "interval": "", - "intervalFactor": 2, - "legendFormat": "{{`{{pod}}`}}", - "legendLink": null, - "refId": "A", - "step": 10 - }, - { - "exemplar": true, - "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{pod=~\"$instances\", namespace=~\"$namespace\"})", - "hide": false, - "interval": "", - "legendFormat": "total", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "CPU Usage", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:189", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": 0, - "show": true - }, - { - "$$hashKey": "object:190", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DataSource}", - "fill": 2, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 7 - }, - "hiddenSeries": false, - "id": 275, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "alias": "quota - requests", - "color": "#F2495C", - "dashes": true, - "fill": 0, - "hiddenSeries": true, - "hideTooltip": true, - "legend": true, - "linewidth": 2, - "stack": false - }, - { - "alias": "quota - limits", - "color": "#FF9830", - "dashes": true, - "fill": 0, - "hiddenSeries": true, - "hideTooltip": true, - "legend": true, - "linewidth": 2, - "stack": false - } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{pod=~\"$instances\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)", - "format": "time_series", - "interval": "", - "intervalFactor": 2, - "legendFormat": "{{`{{pod}}`}}", - "legendLink": null, - "refId": "A", - "step": 10 - }, - { - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{pod=~\"$instances\", namespace=\"$namespace\", container!=\"\", image!=\"\"})", - "hide": false, - "interval": "", - "legendFormat": "total", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Memory Usage (w/o cache)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:246", - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": 0, - "show": true - }, - { - "$$hashKey": "object:247", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 14 - }, - "id": 39, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "sum(cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) by (pod)", - "hide": false, - "interval": "", - "legendFormat": "total ({{`{{pod}}`}})", - "refId": "B" - }, - { - "exemplar": true, - "expr": "sum(cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) by (state, pod)", - "interval": "", - "legendFormat": "{{`{{state}}`}} ({{`{{pod}}`}})", - "refId": "A" - } - ], - "title": "Session States", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "sum(rate(cnpg_pg_stat_database_xact_commit{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])) by (pod)", - "interval": "", - "legendFormat": "committed ({{`{{pod}}`}})", - "refId": "A" - }, - { - "exemplar": true, - "expr": "sum(rate(cnpg_pg_stat_database_xact_rollback{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])) by (pod)", - "hide": false, - "interval": "", - "legendFormat": "rolled back ({{`{{pod}}`}})", - "refId": "B" - } - ], - "title": "Transactions [5m]", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 22 - }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "max by (pod) (cnpg_backends_max_tx_duration_seconds{namespace=~\"$namespace\",pod=~\"$instances\"})", - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Longest Transaction", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 55, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_deadlocks{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "count ({{`{{pod}}`}})", - "refId": "B" - } - ], - "title": "Deadlocks [5m]", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 30 - }, - "id": 54, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_backends_waiting_total{namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Blocked Queries", - "type": "timeseries" - } - ], - "title": "Operational Stats", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 35, - "panels": [ - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 35 - }, - "id": 44, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_tup_deleted{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "interval": "", - "legendFormat": "deleted ({{`{{pod}}`}})", - "refId": "A" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_tup_inserted{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "inserted ({{`{{pod}}`}})", - "refId": "B" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_tup_fetched{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "fetched ({{`{{pod}}`}})", - "refId": "C" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_tup_returned{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "returned ({{`{{pod}}`}})", - "refId": "D" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_tup_updated{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "updated ({{`{{pod}}`}})", - "refId": "E" - } - ], - "title": "Tuple I/O [5m]", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 35 - }, - "id": 46, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_blks_hit{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "interval": "", - "legendFormat": "hit ({{`{{pod}}`}})", - "refId": "A" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_blks_read{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "read ({{`{{pod}}`}})", - "refId": "B" - } - ], - "title": "Block I/O [5m]", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 43 - }, - "id": 22, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.5", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_database_size_bytes{datname!~\"template.*\",datname!=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": " {{`{{pod}}`}}: {{`{{datname}}`}}", - "refId": "A" - } - ], - "title": "Database Size", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 43 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_database_temp_bytes{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "instant": false, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Temp Bytes [5m]", - "type": "timeseries" - } - ], - "title": "Storage & I/O", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 14 - }, - "id": 37, - "panels": [ - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 53 - }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_collector_pg_wal_archive_status{value=\"ready\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": "ready ({{`{{pod}}`}})", - "refId": "A" - }, - { - "exemplar": true, - "expr": "cnpg_collector_pg_wal_archive_status{value=\"done\",namespace=~\"$namespace\",pod=~\"$instances\"}", - "hide": false, - "interval": "", - "legendFormat": "done ({{`{{pod}}`}})", - "refId": "B" - } - ], - "title": "WAL Segment Archive Status", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 53 - }, - "id": 52, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_archiver_archived_count{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "interval": "", - "legendFormat": "archived ({{`{{pod}}`}})", - "refId": "A" - }, - { - "exemplar": true, - "expr": "rate(cnpg_pg_stat_archiver_failed_count{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "failed ({{`{{pod}}`}})", - "refId": "B" - } - ], - "title": "Archiver Status [5m]", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 53 - }, - "id": 53, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_archiver_seconds_since_last_archival{namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": "age ({{`{{pod}}`}})", - "refId": "A" - } - ], - "title": "Last Archive Age", - "type": "timeseries" - } - ], - "title": "Write Ahead Log", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 15 - }, - "id": 18, - "panels": [ - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 600 - }, - { - "color": "dark-red", - "value": 3600 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 6 - }, - "id": 16, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_replication_lag{namespace=~\"$namespace\",pod=~\"$instances\"}", - "instant": false, - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Replication Lag", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 6 - }, - "id": 14, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_replication_write_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-.*\"}", - "instant": false, - "interval": "", - "legendFormat": "{{`{{pod}}`}} -> {{`{{application_name}}`}}", - "refId": "A" - } - ], - "title": "Write Lag", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 6 - }, - "id": 59, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_replication_flush_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-.*\"}", - "instant": false, - "interval": "", - "legendFormat": "{{`{{pod}}`}} -> {{`{{application_name}}`}}", - "refId": "A" - } - ], - "title": "Flush Lag", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 6 - }, - "id": 20, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_replication_replay_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-.*\"}", - "interval": "", - "legendFormat": "{{`{{pod}}`}} -> {{`{{application_name}}`}}", - "refId": "A" - } - ], - "title": "Replay Lag", - "type": "timeseries" - } - ], - "title": "Replication", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 231, - "panels": [ - { - "cards": { - "cardPadding": null, - "cardRound": null - }, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateOranges", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "timeseries", - "datasource": "${DataSource}", - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 63 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 233, - "legend": { - "show": false - }, - "reverseYBuckets": false, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_collector_collection_duration_seconds{namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Collection Duration", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "xBucketNumber": null, - "xBucketSize": null, - "yAxis": { - "decimals": null, - "format": "s", - "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null - }, - "yBucketBound": "auto", - "yBucketNumber": null, - "yBucketSize": null - }, - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 63 - }, - "id": 235, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_collector_last_collection_error{namespace=~\"$namespace\",pod=~\"$instances\"}", - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Errors", - "type": "timeseries" - } - ], - "title": "Collector Stats", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 17 - }, - "id": 239, - "panels": [ - { - "datasource": "${DataSource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "dateTimeAsIso" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 72 - }, - "id": 237, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "exemplar": true, - "expr": "cnpg_collector_first_recoverability_point{namespace=~\"$namespace\",pod=~\"$instances\"}*1000 > 0", - "format": "time_series", - "interval": "", - "legendFormat": "{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "First Recoverability Point", - "type": "timeseries" - } - ], - "title": "Backups", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DataSource}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 18 - }, - "id": 293, - "panels": [ - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": -1, - "drawStyle": "line", - "fillOpacity": 8, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 5, - "x": 0, - "y": 79 - }, - "id": 295, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi" - } - }, - "pluginVersion": "8.2.1", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_bgwriter_checkpoints_req{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "req/{{`{{pod}}`}}", - "refId": "B" - }, - { - "exemplar": true, - "expr": "cnpg_pg_stat_bgwriter_checkpoints_timed{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "timed/{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Requested/Timed", - "type": "timeseries" - }, - { - "datasource": "${DataSource}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": -1, - "drawStyle": "line", - "fillOpacity": 8, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 5, - "x": 5, - "y": 79 - }, - "id": 296, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi" - } - }, - "pluginVersion": "8.2.1", - "targets": [ - { - "exemplar": true, - "expr": "cnpg_pg_stat_bgwriter_checkpoint_write_time{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "write/{{`{{pod}}`}}", - "refId": "B" - }, - { - "exemplar": true, - "expr": "cnpg_pg_stat_bgwriter_checkpoint_sync_time{namespace=~\"$namespace\",pod=~\"$instances\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "sync/{{`{{pod}}`}}", - "refId": "A" - } - ], - "title": "Write/Sync time", - "type": "timeseries" - } - ], - "title": "Checkpoints", - "type": "row" - } - ], - "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "DataSource", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "default", - "value": "default" - }, - "datasource": "${DataSource}", - "definition": "cnpg_collector_up", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "namespace", - "options": [], - "query": { - "query": "cnpg_collector_up", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "/namespace=\"(?[^\"]+)/g", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "cnp-sandbox", - "value": "cnp-sandbox" - }, - "datasource": "${DataSource}", - "definition": "cnpg_collector_up{namespace=~\"$namespace\"}", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "query": "cnpg_collector_up{namespace=~\"$namespace\"}", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "/cluster=\"(?[^\"]+)/g", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "allValue": null, - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "${DataSource}", - "definition": "cnpg_collector_up{namespace=~\"$namespace\",pod=~\"$cluster-.*\"}", - "description": null, - "error": null, - "hide": 0, - "includeAll": true, - "label": null, - "multi": true, - "name": "instances", - "options": [], - "query": { - "query": "cnpg_collector_up{namespace=~\"$namespace\",pod=~\"$cluster-.*\"}", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "/pod=\"(?[^\"]+)/g", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": { - "nowDelay": "" - }, - "timezone": "", - "title": "CloudNativePG", - "uid": "z7FCA4Nnk", - "version": 2 - } -{{- end }} diff --git a/attic/templates/resources/dashboards/dotdc-grafana-dashboards-kubernetes.yaml b/attic/templates/resources/dashboards/dotdc-grafana-dashboards-kubernetes.yaml deleted file mode 100644 index b06e20bf..00000000 --- a/attic/templates/resources/dashboards/dotdc-grafana-dashboards-kubernetes.yaml +++ /dev/null @@ -1,21313 +0,0 @@ -apiVersion: v1 -data: - k8s-addons-prometheus.json: |- - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": [], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "8.5.0" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "5.0.0" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern 'Prometheus' dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 89, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "refId": "A" - } - ], - "title": "Information", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "?", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "orange", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 78, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "name" - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "prometheus_build_info{pod=~\"$pod\", cluster=~\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ version }}`}}", - "range": false, - "refId": "A" - } - ], - "title": "Prometheus version", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 1 - }, - "id": 92, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "up{pod=~\"$pod\", cluster=~\"$cluster\"} < 1", - "instant": true, - "interval": "", - "legendFormat": "__auto", - "range": false, - "refId": "A" - } - ], - "title": "Instance Down", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "text", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 12, - "y": 1 - }, - "id": 72, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(prometheus_tsdb_head_series{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "TSDB Head Series", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 18, - "y": 1 - }, - "id": 94, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(prometheus_sd_discovered_targets{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "instant": true, - "interval": "", - "legendFormat": "__auto", - "range": false, - "refId": "A" - } - ], - "title": "Discovered Targets", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 64, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "refId": "A" - } - ], - "title": "Prometheus", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 6 - }, - "id": 93, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "up{pod=~\"$pod\", cluster=~\"$cluster\"}", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Liveness by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 6 - }, - "id": 96, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(prometheus_config_last_reload_successful{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Config - Last Successful Reload by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 14 - }, - "id": 74, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_target_scrapes_exceeded_body_size_limit_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - Exceeded body size limit", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_target_scrapes_exceeded_sample_limit_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Exceeded sample limit", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Duplicate timestamp", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_target_scrapes_sample_out_of_bounds_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Sample out of bounds", - "range": true, - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_target_scrapes_sample_out_of_order_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Sample out of order", - "range": true, - "refId": "E" - } - ], - "title": "Target Scrapes Errors by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 14 - }, - "id": 84, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(prometheus_sd_discovered_targets{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Number of Targets by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 75, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_target_sync_length_seconds_sum{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod, scrape_job) * 1000", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - {{`{{ scrape_job }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Target Sync by pod, scrape_job", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 22 - }, - "id": 85, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "round(sum(rate(prometheus_target_interval_length_seconds_sum{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval]) / rate(prometheus_target_interval_length_seconds_count{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod))", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Average Scrape Interval by pod", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 30 - }, - "id": 98, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "refId": "A" - } - ], - "title": "Prometheus TSDB / Query Engine", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 31 - }, - "id": 59, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(prometheus_tsdb_head_series{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - Head Series", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(prometheus_tsdb_head_chunks{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Head Chunks", - "range": true, - "refId": "B" - } - ], - "title": "TSDB Head Series & Chunks by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 31 - }, - "id": 60, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_tsdb_head_samples_appended_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "TSDB Head samples appended - rate by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 39 - }, - "id": 101, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(prometheus_tsdb_blocks_loaded{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - Head Series", - "range": true, - "refId": "A" - } - ], - "title": "TSDB Blocks Loaded by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 39 - }, - "id": 102, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_tsdb_compactions_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - Total Compactions", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_tsdb_compactions_triggered_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Triggered Compactions", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_tsdb_compactions_skipped_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Skipped Compactions", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_tsdb_compactions_failed_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Failed Compactions", - "range": true, - "refId": "D" - } - ], - "title": "TSDB Rate of Compactions by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 47 - }, - "id": 90, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_tsdb_reloads_failures_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "TSDB Reload Failures by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 47 - }, - "id": 95, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_tsdb_head_series_created_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - Created series", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(prometheus_tsdb_head_series_removed_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "hide": false, - "legendFormat": "{{`{{ pod }}`}} - Deleted series", - "range": true, - "refId": "B" - } - ], - "title": "TSDB Created & Deleted series by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 55 - }, - "id": 73, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(prometheus_engine_query_duration_seconds_count{pod=~\"$pod\", slice=\"inner_eval\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Engine Query Count by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 55 - }, - "id": 86, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "max(prometheus_engine_query_duration_seconds{pod=~\"$pod\", cluster=~\"$cluster\"}) by (pod, slice) * 1000", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - {{`{{ slice }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Engine Query Duration by pod, slice", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 63 - }, - "id": 47, - "panels": [], - "targets": [ - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A" - } - ], - "title": "Resources", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU Cores", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 4, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "limit" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#F2495C", - "mode": "fixed" - } - }, - { - "id": "custom.fillOpacity", - "value": 0 - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 64 - }, - "id": 29, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{pod=~\"$pod\", image!=\"\", container!=\"\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod, container)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - {{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Usage by pod, container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Bytes", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 64 - }, - "id": 51, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{pod=~\"$pod\", image!=\"\", container!=\"\", cluster=~\"$cluster\"}) by (pod, container)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}} - {{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Memory Usage by container", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 72 - }, - "id": 66, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "refId": "A" - } - ], - "title": "Storage", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 73 - }, - "id": 62, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_capacity_bytes{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Persistent Volumes - Capacity and usage in %", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 73 - }, - "id": 87, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}} - Used", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kubelet_volume_stats_capacity_bytes{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim)", - "hide": false, - "legendFormat": "{{`{{ persistentvolumeclaim }}`}} - Capacity", - "range": true, - "refId": "B" - } - ], - "title": "Persistent Volumes - Capacity and usage in bytes", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 81 - }, - "id": 68, - "links": [], - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.4", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "1 - sum(kubelet_volume_stats_inodes_used{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_inodes{persistentvolumeclaim=~\".*prom.*\", cluster=~\"$cluster\"}) by (persistentvolumeclaim)", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "range": true, - "refId": "A", - "step": 240 - } - ], - "title": "Persistent Volumes - Inodes", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 89 - }, - "id": 45, - "panels": [], - "targets": [ - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A" - } - ], - "title": "Network", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 90 - }, - "id": 31, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_network_receive_bytes_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Received", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_bytes_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Transmitted", - "range": true, - "refId": "B" - } - ], - "title": "Network - Bandwidth by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 90 - }, - "id": 34, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_network_receive_packets_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Received", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_packets_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Transmitted", - "range": true, - "refId": "B" - } - ], - "title": "Network - Packets rate by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 98 - }, - "id": 36, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_network_receive_packets_dropped_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Received", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_packets_dropped_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Transmitted", - "range": true, - "refId": "B" - } - ], - "title": "Network - Packets Dropped by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 98 - }, - "id": 37, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_network_receive_errors_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Received", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_errors_total{pod=~\"$pod\", cluster=~\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}} - Transmitted", - "range": true, - "refId": "B" - } - ], - "title": "Network - Errors by pod", - "type": "timeseries" - } - ], - "refresh": "30s", - "revision": 1, - "schemaVersion": 38, - "style": "dark", - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": { - "selected": true, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "isNone": true, - "selected": false, - "text": "None", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(prometheus_build_info{cluster=\"$cluster\"}, pod)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "pod", - "options": [], - "query": { - "query": "label_values(prometheus_build_info{cluster=\"$cluster\"}, pod)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Prometheus", - "uid": "k8s_addons_prometheus", - "version": 3, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-addons-prometheus - namespace: prometheus ---- -#apiVersion: v1 -#data: -# k8s-addons-trivy-operator.json: | -# { -# "__inputs": [ -# { -# "name": "DS_PROMETHEUS", -# "label": "Prometheus", -# "description": "", -# "type": "datasource", -# "pluginId": "prometheus", -# "pluginName": "Prometheus" -# } -# ], -# "__elements": [], -# "__requires": [ -# { -# "type": "grafana", -# "id": "grafana", -# "name": "Grafana", -# "version": "8.5.0" -# }, -# { -# "type": "datasource", -# "id": "prometheus", -# "name": "Prometheus", -# "version": "5.0.0" -# }, -# { -# "type": "panel", -# "id": "timeseries", -# "name": "Time series", -# "version": "" -# }, -# { -# "type": "panel", -# "id": "stat", -# "name": "Stat", -# "version": "" -# }, -# { -# "type": "panel", -# "id": "table", -# "name": "Table", -# "version": "" -# } -# ], -# "annotations": { -# "list": [ -# { -# "builtIn": 1, -# "datasource": { -# "type": "datasource", -# "uid": "grafana" -# }, -# "enable": true, -# "hide": true, -# "iconColor": "rgba(0, 211, 255, 1)", -# "name": "Annotations & Alerts", -# "target": { -# "limit": 100, -# "matchAny": false, -# "tags": [], -# "type": "dashboard" -# }, -# "type": "dashboard" -# } -# ] -# }, -# "description": "This is a modern dashboard for the Trivy Operator from Aqua Security. Made to take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", -# "editable": true, -# "fiscalYearStartMonth": 0, -# "graphTooltip": 1, -# "links": [], -# "liveNow": false, -# "panels": [ -# { -# "collapsed": false, -# "datasource": { -# "type": "datasource", -# "uid": "grafana" -# }, -# "gridPos": { -# "h": 1, -# "w": 24, -# "x": 0, -# "y": 0 -# }, -# "id": 43, -# "panels": [], -# "title": "Vulnerabilities", -# "type": "row" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "red", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 0, -# "y": 1 -# }, -# "id": 51, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{severity=\"Critical\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "CRITICAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "orange", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 4, -# "y": 1 -# }, -# "id": 50, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{severity=\"High\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "HIGH", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "yellow", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 8, -# "y": 1 -# }, -# "id": 49, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{severity=\"Medium\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "MEDIUM", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 12, -# "y": 1 -# }, -# "id": 60, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{severity=\"Low\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "LOW", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "purple", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 16, -# "y": 1 -# }, -# "id": 52, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{severity=\"Unknown\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "UNKNOWN", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "text", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 20, -# "y": 1 -# }, -# "id": 39, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "TOTAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 0, -# "y": 5 -# }, -# "id": 58, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "single", -# "sort": "none" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{cluster=~\"$cluster\"}) by (namespace)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "{{`{{namespace}}`}}", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total vulnerabilities by namespaces", -# "type": "timeseries" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [ -# { -# "matcher": { -# "id": "byName", -# "options": "Critical" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "red", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "High" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "orange", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Medium" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "yellow", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Low" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "blue", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Unknown" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "purple", -# "mode": "fixed" -# } -# } -# ] -# } -# ] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 12, -# "y": 5 -# }, -# "id": 61, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "multi", -# "sort": "desc" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{cluster=~\"$cluster\"}) by (severity)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total vulnerabilities by severity", -# "type": "timeseries" -# }, -# { -# "collapsed": false, -# "gridPos": { -# "h": 1, -# "w": 24, -# "x": 0, -# "y": 13 -# }, -# "id": 85, -# "panels": [], -# "title": "Vulnerability Details", -# "type": "row" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "description": "", -# "fieldConfig": { -# "defaults": { -# "custom": { -# "align": "auto", -# "displayMode": "auto", -# "filterable": true, -# "inspect": false -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "orange", -# "value": 80 -# } -# ] -# } -# }, -# "overrides": [ -# { -# "matcher": { -# "id": "byName", -# "options": "severity" -# }, -# "properties": [ -# { -# "id": "mappings", -# "value": [ -# { -# "options": { -# "Critical": { -# "color": "red", -# "index": 0 -# }, -# "High": { -# "color": "orange", -# "index": 1 -# }, -# "Low": { -# "color": "blue", -# "index": 3 -# }, -# "Medium": { -# "color": "yellow", -# "index": 2 -# }, -# "Unknown": { -# "color": "purple", -# "index": 4 -# } -# }, -# "type": "value" -# } -# ] -# }, -# { -# "id": "custom.displayMode", -# "value": "color-text" -# } -# ] -# } -# ] -# }, -# "gridPos": { -# "h": 12, -# "w": 24, -# "x": 0, -# "y": 14 -# }, -# "id": 83, -# "options": { -# "footer": { -# "enablePagination": true, -# "fields": [ -# "Value" -# ], -# "reducer": [ -# "sum" -# ], -# "show": false -# }, -# "showHeader": true, -# "sortBy": [] -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_vulnerabilities{namespace=~\"$namespace\", cluster=~\"$cluster\"}) by (namespace, image_registry, image_repository, image_tag, severity) > 0", -# "format": "table", -# "instant": false, -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Vulnerability count per image and severity in $namespace namespace(s)", -# "transformations": [ -# { -# "id": "organize", -# "options": { -# "excludeByName": { -# "Time": true, -# "Value": false -# }, -# "indexByName": { -# "Time": 0, -# "Value": 6, -# "image_registry": 2, -# "image_repository": 3, -# "image_tag": 4, -# "namespace": 1, -# "severity": 5 -# }, -# "renameByName": { -# "Value": "Nb of vulnerabilities", -# "image_registry": "Image Registry", -# "image_repository": "Image Repository", -# "image_tag": "Image Tag", -# "namespace": "Namespace", -# "severity": "Severity" -# } -# } -# }, -# { -# "id": "groupBy", -# "options": { -# "fields": { -# "All values": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Count": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Image Registry": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Image Repository": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Image Tag": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Namespace": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Nb of vulnerabilities": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Severity": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Value": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "image_registry": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "image_repository": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "image_tag": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "namespace": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "severity": { -# "aggregations": [], -# "operation": "groupby" -# } -# } -# } -# } -# ], -# "type": "table" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "description": "Require operator.metricsVulnIdEnabled: true", -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "custom": { -# "align": "auto", -# "displayMode": "auto", -# "filterable": true, -# "inspect": false -# }, -# "links": [], -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [ -# { -# "matcher": { -# "id": "byName", -# "options": "severity" -# }, -# "properties": [ -# { -# "id": "mappings", -# "value": [ -# { -# "options": { -# "Critical": { -# "color": "red", -# "index": 0 -# }, -# "High": { -# "color": "orange", -# "index": 1 -# }, -# "Low": { -# "color": "blue", -# "index": 3 -# }, -# "Medium": { -# "color": "yellow", -# "index": 2 -# }, -# "Unknown": { -# "color": "purple", -# "index": 4 -# } -# }, -# "type": "value" -# } -# ] -# }, -# { -# "id": "custom.displayMode", -# "value": "color-text" -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "vuln_id" -# }, -# "properties": [ -# { -# "id": "links", -# "value": [ -# { -# "targetBlank": true, -# "title": "https://nvd.nist.gov/vuln/detail/${__value.text}", -# "url": "https://nvd.nist.gov/vuln/detail/${__value.text}" -# } -# ] -# } -# ] -# } -# ] -# }, -# "gridPos": { -# "h": 12, -# "w": 24, -# "x": 0, -# "y": 26 -# }, -# "id": 78, -# "options": { -# "footer": { -# "enablePagination": true, -# "fields": "", -# "reducer": [ -# "sum" -# ], -# "show": false -# }, -# "showHeader": true, -# "sortBy": [] -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_vulnerability_id{vuln_id=~\"CVE.*\", namespace=~\"$namespace\", cluster=~\"$cluster\"}) by (namespace, image_registry, image_repository, image_tag, vuln_id, severity)", -# "format": "table", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Detaillled CVE vulnerabilities in $namespace namespace(s)", -# "transformations": [ -# { -# "id": "organize", -# "options": { -# "excludeByName": { -# "Time": true, -# "Value": true, -# "__name__": true, -# "container": true, -# "endpoint": true, -# "instance": true, -# "job": true, -# "namespace": false, -# "service": true -# }, -# "indexByName": { -# "Time": 0, -# "Value": 7, -# "image_registry": 2, -# "image_repository": 3, -# "image_tag": 4, -# "namespace": 1, -# "severity": 6, -# "vuln_id": 5 -# }, -# "renameByName": { -# "image_namespace": "namespace", -# "image_registry": "Image Registry", -# "image_repository": "Image Repository", -# "image_tag": "Image Tag", -# "namespace": "Namespace", -# "severity": "Severity", -# "vuln_id": "Vulnerability", -# "vulnerability_id": "" -# } -# } -# }, -# { -# "id": "groupBy", -# "options": { -# "fields": { -# "Image Registry": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Image Repository": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Image Tag": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Namespace": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Severity": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "Value": { -# "aggregations": [ -# "lastNotNull" -# ] -# }, -# "Vulnerability": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "image_namespace": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "namespace": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "severity": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "vuln_id": { -# "aggregations": [], -# "operation": "groupby" -# }, -# "vulnerability_id": { -# "aggregations": [], -# "operation": "groupby" -# } -# } -# } -# } -# ], -# "type": "table" -# }, -# { -# "collapsed": false, -# "datasource": { -# "type": "datasource", -# "uid": "grafana" -# }, -# "gridPos": { -# "h": 1, -# "w": 24, -# "x": 0, -# "y": 38 -# }, -# "id": 47, -# "panels": [], -# "title": "Config Audit Reports", -# "type": "row" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "red", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 0, -# "y": 39 -# }, -# "id": 56, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{severity=\"Critical\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "CRITICAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "orange", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 4, -# "y": 39 -# }, -# "id": 55, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{severity=\"High\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "HIGH", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "yellow", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 8, -# "y": 39 -# }, -# "id": 54, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{severity=\"Medium\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "MEDIUM", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 12, -# "y": 39 -# }, -# "id": 53, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{severity=\"Low\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "LOW", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "text", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 16, -# "y": 39 -# }, -# "id": 65, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "TOTAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 0, -# "y": 43 -# }, -# "id": 62, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "single", -# "sort": "none" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{cluster=~\"$cluster\"}) by (namespace)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total config audit report by namespaces", -# "type": "timeseries" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [ -# { -# "matcher": { -# "id": "byName", -# "options": "Critical" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "red", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "High" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "orange", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Medium" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "yellow", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Low" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "blue", -# "mode": "fixed" -# } -# } -# ] -# } -# ] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 12, -# "y": 43 -# }, -# "id": 63, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "multi", -# "sort": "desc" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_resource_configaudits{cluster=~\"$cluster\"}) by (severity)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total config audit report by severity", -# "type": "timeseries" -# }, -# { -# "collapsed": false, -# "gridPos": { -# "h": 1, -# "w": 24, -# "x": 0, -# "y": 51 -# }, -# "id": 68, -# "panels": [], -# "title": "RBAC Assessments", -# "type": "row" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "red", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 0, -# "y": 52 -# }, -# "id": 72, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{severity=\"Critical\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "CRITICAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "orange", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 4, -# "y": 52 -# }, -# "id": 71, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{severity=\"High\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "HIGH", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "yellow", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 8, -# "y": 52 -# }, -# "id": 70, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{severity=\"Medium\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "MEDIUM", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 12, -# "y": 52 -# }, -# "id": 69, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{severity=\"Low\", namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "LOW", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "thresholds" -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "text", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 4, -# "w": 4, -# "x": 16, -# "y": 52 -# }, -# "id": 73, -# "options": { -# "colorMode": "value", -# "graphMode": "area", -# "justifyMode": "auto", -# "orientation": "auto", -# "reduceOptions": { -# "calcs": [ -# "last" -# ], -# "fields": "", -# "values": false -# }, -# "textMode": "auto" -# }, -# "pluginVersion": "9.3.8", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{namespace=~\"$namespace\", cluster=~\"$cluster\"})", -# "instant": true, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "refId": "A" -# } -# ], -# "title": "TOTAL", -# "type": "stat" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 0, -# "y": 56 -# }, -# "id": 74, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "single", -# "sort": "none" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{cluster=~\"$cluster\"}) by (namespace)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total RBAC Assessments by namespaces", -# "type": "timeseries" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [ -# { -# "matcher": { -# "id": "byName", -# "options": "Critical" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "red", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "High" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "orange", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Medium" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "yellow", -# "mode": "fixed" -# } -# } -# ] -# }, -# { -# "matcher": { -# "id": "byName", -# "options": "Low" -# }, -# "properties": [ -# { -# "id": "color", -# "value": { -# "fixedColor": "blue", -# "mode": "fixed" -# } -# } -# ] -# } -# ] -# }, -# "gridPos": { -# "h": 8, -# "w": 12, -# "x": 12, -# "y": 56 -# }, -# "id": 75, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "multi", -# "sort": "desc" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_role_rbacassessments{cluster=~\"$cluster\"}) by (severity)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total RBAC Assessments by severity", -# "type": "timeseries" -# }, -# { -# "collapsed": false, -# "gridPos": { -# "h": 1, -# "w": 24, -# "x": 0, -# "y": 64 -# }, -# "id": 81, -# "panels": [], -# "title": "Exposed Secrets", -# "type": "row" -# }, -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "fieldConfig": { -# "defaults": { -# "color": { -# "mode": "palette-classic" -# }, -# "custom": { -# "axisCenteredZero": false, -# "axisColorMode": "text", -# "axisLabel": "", -# "axisPlacement": "auto", -# "barAlignment": 0, -# "drawStyle": "line", -# "fillOpacity": 15, -# "gradientMode": "opacity", -# "hideFrom": { -# "legend": false, -# "tooltip": false, -# "viz": false -# }, -# "lineInterpolation": "linear", -# "lineWidth": 2, -# "pointSize": 5, -# "scaleDistribution": { -# "type": "linear" -# }, -# "showPoints": "never", -# "spanNulls": false, -# "stacking": { -# "group": "A", -# "mode": "none" -# }, -# "thresholdsStyle": { -# "mode": "off" -# } -# }, -# "mappings": [], -# "thresholds": { -# "mode": "absolute", -# "steps": [ -# { -# "color": "green", -# "value": null -# }, -# { -# "color": "blue", -# "value": 1 -# } -# ] -# }, -# "unit": "none" -# }, -# "overrides": [] -# }, -# "gridPos": { -# "h": 8, -# "w": 24, -# "x": 0, -# "y": 65 -# }, -# "id": 76, -# "options": { -# "legend": { -# "calcs": [], -# "displayMode": "table", -# "placement": "right", -# "showLegend": true -# }, -# "tooltip": { -# "mode": "single", -# "sort": "none" -# } -# }, -# "pluginVersion": "8.5.0", -# "targets": [ -# { -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "editorMode": "code", -# "exemplar": false, -# "expr": "sum(trivy_image_exposedsecrets{cluster=~\"$cluster\"}) by (namespace)", -# "instant": false, -# "interval": "$resolution", -# "legendFormat": "__auto", -# "range": true, -# "refId": "A" -# } -# ], -# "title": "Total Exposed Secrets by namespaces", -# "type": "timeseries" -# } -# ], -# "refresh": "30s", -# "schemaVersion": 37, -# "style": "dark", -# "tags": [ -# "Prometheus", -# "Addons", -# "Trivy", -# "Trivy-operator" -# ], -# "templating": { -# "list": [ -# { -# "current": { -# "selected": false, -# "text": "Prometheus", -# "value": "Prometheus" -# }, -# "hide": 0, -# "includeAll": false, -# "multi": false, -# "name": "datasource", -# "options": [], -# "query": "prometheus", -# "queryValue": "", -# "refresh": 1, -# "regex": "", -# "skipUrlSync": false, -# "type": "datasource" -# }, -# { -# "current": { -# "isNone": true, -# "selected": false, -# "text": "None", -# "value": "" -# }, -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "definition": "label_values(kube_node_info,cluster)", -# "hide": 0, -# "includeAll": false, -# "multi": false, -# "name": "cluster", -# "options": [], -# "query": { -# "qryType": 1, -# "query": "label_values(kube_node_info,cluster)", -# "refId": "PrometheusVariableQueryEditor-VariableQuery" -# }, -# "refresh": 1, -# "regex": "", -# "skipUrlSync": false, -# "sort": 1, -# "type": "query" -# }, -# { -# "current": { -# "selected": true, -# "text": [ -# "All" -# ], -# "value": [ -# "$__all" -# ] -# }, -# "datasource": { -# "type": "prometheus", -# "uid": "${datasource}" -# }, -# "definition": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", -# "hide": 0, -# "includeAll": true, -# "multi": true, -# "name": "namespace", -# "options": [], -# "query": { -# "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", -# "refId": "StandardVariableQuery" -# }, -# "refresh": 1, -# "regex": "", -# "skipUrlSync": false, -# "sort": 1, -# "type": "query" -# }, -# { -# "current": { -# "selected": true, -# "text": "30s", -# "value": "30s" -# }, -# "hide": 0, -# "includeAll": false, -# "multi": false, -# "name": "resolution", -# "options": [ -# { -# "selected": false, -# "text": "1s", -# "value": "1s" -# }, -# { -# "selected": false, -# "text": "15s", -# "value": "15s" -# }, -# { -# "selected": true, -# "text": "30s", -# "value": "30s" -# }, -# { -# "selected": false, -# "text": "1m", -# "value": "1m" -# }, -# { -# "selected": false, -# "text": "3m", -# "value": "3m" -# }, -# { -# "selected": false, -# "text": "5m", -# "value": "5m" -# } -# ], -# "query": "1s, 15s, 30s, 1m, 3m, 5m", -# "queryValue": "", -# "skipUrlSync": false, -# "type": "custom" -# } -# ] -# }, -# "time": { -# "from": "now-1h", -# "to": "now" -# }, -# "timepicker": {}, -# "timezone": "", -# "title": "Trivy Operator - Vulnerabilities", -# "uid": "security_trivy_operator", -# "version": 12, -# "weekStart": "" -# } -#kind: ConfigMap -#metadata: -# annotations: -# grafana_folder: Kubernetes -# labels: -# grafana_dashboard: "1" -# name: dashboards-k8s-addons-trivy-operator -# namespace: prometheus ---- -apiVersion: v1 -data: - k8s-system-api-server.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": [], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "8.4.4" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "5.0.0" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern API Server dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [ - { - "options": { - "0": { - "text": "DOWN" - }, - "1": { - "text": "UP" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 42, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "up{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}", - "interval": "", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - Health Status", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "__name__" - }, - "properties": [ - { - "id": "custom.width", - "value": 188 - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 60, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": false, - "displayName": "removed_release" - } - ] - }, - "pluginVersion": "10.0.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "apiserver_requested_deprecated_apis{cluster=~\"$cluster\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Deprecated Kubernetes Resources", - "transformations": [ - { - "id": "labelsToFields", - "options": { - "keepLabels": [ - "group", - "job", - "removed_release", - "resource", - "version", - "name" - ], - "mode": "columns" - } - }, - { - "id": "merge", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "Value": true, - "job": true - }, - "indexByName": { - "Time": 6, - "Value": 7, - "group": 1, - "job": 5, - "namespace": 0, - "removed_release": 4, - "resource": 3, - "version": 2 - }, - "renameByName": {} - } - }, - { - "id": "groupBy", - "options": { - "fields": { - "group": { - "aggregations": [ - "lastNotNull" - ], - "operation": "groupby" - }, - "job": { - "aggregations": [], - "operation": "groupby" - }, - "namespace": { - "aggregations": [ - "lastNotNull" - ], - "operation": "groupby" - }, - "removed_release": { - "aggregations": [], - "operation": "groupby" - }, - "resource": { - "aggregations": [ - "lastNotNull" - ], - "operation": "groupby" - }, - "version": { - "aggregations": [], - "operation": "groupby" - } - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 38, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum by (code) (rate(apiserver_request_total{cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "{{`{{ code }}`}}", - "refId": "A" - } - ], - "title": "API Server - HTTP Requests by code", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 39, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum by (verb) (rate(apiserver_request_total{cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "{{`{{ verb}}`}}", - "refId": "A" - } - ], - "title": "API Server - HTTP Requests by verb", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 53, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(apiserver_request_duration_seconds_sum{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])) by (instance)\n/\nsum(rate(apiserver_request_duration_seconds_count{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - HTTP Requests Latency by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 54, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(apiserver_request_duration_seconds_sum{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])) by (verb)\n/\nsum(rate(apiserver_request_duration_seconds_count{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])) by (verb)", - "interval": "$resolution", - "legendFormat": "{{`{{ verb }}`}}", - "refId": "A" - } - ], - "title": "API Server - HTTP Requests Latency by verb", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 24 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum by(instance) (rate(apiserver_request_total{code=~\"5..\", job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval]))\n / sum by(instance) (rate(apiserver_request_total{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - Errors by Instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 24 - }, - "id": 51, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum by(verb) (rate(apiserver_request_total{code=~\"5..\",job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval]))\n / sum by(verb) (rate(apiserver_request_total{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "{{`{{ verb }}`}}", - "refId": "A" - } - ], - "title": "API Server - Errors by verb", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 32 - }, - "id": 40, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(apiserver_request_total{cluster=~\"$cluster\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - Stacked HTTP Requests by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 32 - }, - "id": 56, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(workqueue_depth{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - Work Queue by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 40 - }, - "id": 47, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "rate(process_cpu_seconds_total{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}[$__rate_interval])", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - CPU Usage by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 40 - }, - "id": 48, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "process_resident_memory_bytes{job=~\"kubernetes-apiservers|apiserver\", cluster=~\"$cluster\"}", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "API Server - Memory Usage by instance", - "type": "timeseries" - } - ], - "refresh": "30s", - "schemaVersion": 38, - "style": "dark", - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "label": "", - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "isNone": true, - "selected": false, - "text": "None", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": true, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / System / API Server", - "uid": "k8s_system_apisrv", - "version": 17, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-system-api-server - namespace: prometheus ---- -apiVersion: v1 -data: - k8s-system-coredns.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": [], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "8.4.4" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "5.0.0" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern CoreDNS dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [ - { - "options": { - "0": { - "text": "DOWN" - }, - "1": { - "text": "UP" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 25, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "vertical", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "value_and_name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "up{job=~\"$job\", instance=~\"$instance\", cluster=~\"$cluster\"}", - "interval": "", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - Health Status", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 3 - }, - "id": 19, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - CPU Usage by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 3 - }, - "id": 21, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\", cluster=~\"$cluster\"}", - "interval": "", - "legendFormat": "{{`{{ instance }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - Memory Usage by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 11 - }, - "id": 9, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_dns_requests_total{instance=~\"$instance\",proto=\"$protocol\", cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "total $protocol requests", - "refId": "A" - } - ], - "title": "CoreDNS - Total DNS Requests ($protocol)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 11 - }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_dns_request_size_bytes_sum{instance=~\"$instance\",proto=\"$protocol\", cluster=~\"$cluster\"}[$__rate_interval])) by (proto) / sum(rate(coredns_dns_request_size_bytes_count{instance=~\"$instance\",proto=\"$protocol\", cluster=~\"$cluster\"}[$__rate_interval])) by (proto)", - "interval": "$resolution", - "legendFormat": "average $protocol packet size", - "refId": "A" - } - ], - "title": "CoreDNS - Average Packet Size ($protocol)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 19 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_dns_requests_total{instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])) by (type)", - "interval": "$resolution", - "legendFormat": "{{`{{ type }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - Requests by type", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 19 - }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_dns_responses_total{instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])) by (rcode)", - "interval": "$resolution", - "legendFormat": "{{`{{ rcode }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - Requests by return code", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 27 - }, - "id": 23, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_forward_requests_total{cluster=~\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "total forward requests", - "refId": "A" - } - ], - "title": "CoreDNS - Total Forward Requests", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 27 - }, - "id": 13, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_forward_responses_total{rcode=~\"SERVFAIL|REFUSED\", cluster=~\"$cluster\"}[$__rate_interval])) by (rcode)", - "interval": "$resolution", - "legendFormat": "{{`{{ rcode }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - DNS Errors", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 35 - }, - "id": 17, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_cache_hits_total{instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])) by (type)", - "interval": "$resolution", - "legendFormat": "{{`{{ type }}`}}", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(coredns_cache_misses_total{instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])) by (type)", - "interval": "$resolution", - "legendFormat": "misses", - "refId": "B" - } - ], - "title": "CoreDNS - Cache Hits / Misses", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 35 - }, - "id": 15, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(coredns_cache_entries{cluster=~\"$cluster\"}) by (type)", - "interval": "", - "legendFormat": "{{`{{ type }}`}}", - "refId": "A" - } - ], - "title": "CoreDNS - Cache Size", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 12, - "x": 0, - "y": 43 - }, - "id": 27, - "options": { - "calculate": false, - "cellGap": 1, - "color": { - "exponent": 0.5, - "fill": "dark-orange", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "RdYlBu", - "steps": 64 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": true - }, - "rowsFrame": { - "layout": "auto" - }, - "tooltip": { - "mode": "single", - "showColorScale": false, - "yHistogram": false - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "s" - } - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(increase(coredns_dns_request_duration_seconds_bucket{instance=~\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])) by (le)", - "format": "heatmap", - "legendFormat": "{{`{{le}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CoreDNS - DNS request duration", - "type": "heatmap" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 12, - "x": 12, - "y": 43 - }, - "id": 28, - "options": { - "calculate": false, - "cellGap": 1, - "color": { - "exponent": 0.5, - "fill": "dark-orange", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "RdYlBu", - "steps": 64 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": true - }, - "rowsFrame": { - "layout": "auto" - }, - "tooltip": { - "mode": "single", - "showColorScale": false, - "yHistogram": false - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "decbytes" - } - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(increase(coredns_dns_request_size_bytes_bucket{instance=~\"$instance\", le!=\"0\", cluster=~\"$cluster\"}[$__rate_interval])) by (le)", - "format": "heatmap", - "legendFormat": "{{`{{le}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CoreDNS - DNS request size", - "type": "heatmap" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 12, - "x": 0, - "y": 53 - }, - "id": 29, - "options": { - "calculate": false, - "cellGap": 1, - "color": { - "exponent": 0.5, - "fill": "dark-orange", - "mode": "scheme", - "reverse": false, - "scale": "exponential", - "scheme": "RdYlBu", - "steps": 64 - }, - "exemplars": { - "color": "rgba(255,0,255,0.7)" - }, - "filterValues": { - "le": 1e-9 - }, - "legend": { - "show": true - }, - "rowsFrame": { - "layout": "auto" - }, - "tooltip": { - "mode": "single", - "showColorScale": false, - "yHistogram": false - }, - "yAxis": { - "axisPlacement": "left", - "reverse": false, - "unit": "decbytes" - } - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(increase(coredns_dns_response_size_bytes_bucket{instance=~\"$instance\", le!=\"0\", cluster=~\"$cluster\"}[$__rate_interval])) by (le)", - "format": "heatmap", - "legendFormat": "{{`{{le}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CoreDNS - DNS response size", - "type": "heatmap" - } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "isNone": true, - "selected": false, - "text": "None", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(up{job=\"$job\", cluster=\"$cluster\"},instance)", - "hide": 0, - "includeAll": true, - "label": "", - "multi": false, - "name": "instance", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(up{job=\"$job\", cluster=\"$cluster\"},instance)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "udp,tcp", - "current": { - "selected": false, - "text": "udp", - "value": "udp" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(coredns_dns_requests_total{cluster=\"$cluster\"}, proto)", - "hide": 0, - "includeAll": false, - "label": "", - "multi": false, - "name": "protocol", - "options": [], - "query": { - "query": "label_values(coredns_dns_requests_total{cluster=\"$cluster\"}, proto)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": true, - "text": [ - "coredns" - ], - "value": [ - "coredns" - ] - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(coredns_build_info{cluster=\"$cluster\"},job)", - "hide": 0, - "includeAll": false, - "multi": true, - "name": "job", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(coredns_build_info{cluster=\"$cluster\"},job)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / System / CoreDNS", - "uid": "k8s_system_coredns", - "version": 18, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-system-coredns - namespace: prometheus ---- -apiVersion: v1 -data: - k8s-views-global.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": {}, - "__requires": [ - { - "type": "panel", - "id": "bargauge", - "name": "Bar gauge", - "version": "" - }, - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "10.3.1" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern 'Global View' dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 67, - "panels": [], - "title": "Overview", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 77, - "options": { - "displayMode": "lcd", - "maxVizHeight": 300, - "minVizHeight": 10, - "minVizWidth": 0, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "valueMode": "color" - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "avg(sum by (instance, cpu) (rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])))", - "interval": "", - "legendFormat": "Real Linux", - "range": true, - "refId": "Real Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "avg(sum by (core) (rate(windows_cpu_time_total{mode!=\"idle\", cluster=\"$cluster\"}[$__rate_interval])))", - "hide": false, - "interval": "", - "legendFormat": "Real Windows", - "range": true, - "refId": "Real Windows" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{resource=\"cpu\", cluster=\"$cluster\"}) / sum(machine_cpu_cores{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "Requests" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{resource=\"cpu\", cluster=\"$cluster\"}) / sum(machine_cpu_cores{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "Limits" - } - ], - "title": "Global CPU Usage", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Real", - "mode": "reduceRow", - "reduce": { - "include": [ - "Real Linux", - "Real Windows" - ], - "reducer": "mean" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Real Linux": true, - "Real Windows": true, - "Time": true - }, - "indexByName": { - "Limits": 5, - "Real": 1, - "Real Linux": 2, - "Real Windows": 3, - "Requests": 4, - "Time": 0 - }, - "renameByName": {} - } - } - ], - "type": "bargauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 1 - }, - "id": 78, - "options": { - "displayMode": "lcd", - "maxVizHeight": 300, - "minVizHeight": 10, - "minVizWidth": 0, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "text": {}, - "valueMode": "color" - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"} - node_memory_MemAvailable_bytes{cluster=\"$cluster\", job=\"$job\"}) / sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"})", - "hide": false, - "interval": "", - "legendFormat": "Real Linux", - "range": true, - "refId": "Real Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(windows_memory_available_bytes{cluster=\"$cluster\"} + windows_memory_cache_bytes{cluster=\"$cluster\"}) / sum(windows_os_visible_memory_bytes{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Real Windows", - "range": true, - "refId": "Real Windows" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{resource=\"memory\", cluster=\"$cluster\"}) / sum(machine_memory_bytes{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "Requests" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{resource=\"memory\", cluster=\"$cluster\"}) / sum(machine_memory_bytes{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "Limits" - } - ], - "title": "Global RAM Usage", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Real", - "mode": "reduceRow", - "reduce": { - "include": [ - "Real Linux", - "Real Windows" - ], - "reducer": "mean" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Real Linux": true, - "Real Windows": true, - "Time": true - }, - "includeByName": {}, - "indexByName": { - "Limits": 5, - "Real": 3, - "Real Linux": 1, - "Real Windows": 2, - "Requests": 4, - "Time": 0 - }, - "renameByName": {} - } - } - ], - "type": "bargauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 2, - "x": 12, - "y": 1 - }, - "id": 63, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "count(count by (node) (kube_node_info{cluster=\"$cluster\"}))", - "interval": "", - "legendFormat": "", - "range": true, - "refId": "A" - } - ], - "title": "Nodes", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 12, - "w": 10, - "x": 14, - "y": 1 - }, - "id": 52, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kube_namespace_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Namespaces", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_container_status_running{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Running Containers", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_status_phase{phase=\"Running\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Running Pods", - "refId": "O" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_service_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Services", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_endpoint_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Endpoints", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_ingress_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Ingresses", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_deployment_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Deployments", - "refId": "F" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_statefulset_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Statefulsets", - "refId": "G" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_daemonset_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Daemonsets", - "refId": "H" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_persistentvolumeclaim_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Persistent Volume Claims", - "refId": "I" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_hpa_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Horizontal Pod Autoscalers", - "refId": "J" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_configmap_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Configmaps", - "refId": "K" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_secret_info{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Secrets", - "refId": "L" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_networkpolicy_labels{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Network Policies", - "refId": "M" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "count(count by (node) (kube_node_info{cluster=\"$cluster\"}))", - "hide": false, - "interval": "", - "legendFormat": "Nodes", - "refId": "N" - } - ], - "title": "Kubernetes Resource Count", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 2, - "x": 12, - "y": 5 - }, - "id": 59, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "count(kube_namespace_created{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Namespaces", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 9 - }, - "id": 37, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval]))", - "interval": "", - "legendFormat": "Real Linux", - "range": true, - "refId": "Real Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(windows_cpu_time_total{mode!=\"idle\", cluster=\"$cluster\"}[$__rate_interval]))", - "hide": false, - "interval": "", - "legendFormat": "Real Windows", - "range": true, - "refId": "Real Windows" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{resource=\"cpu\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "Requests" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{resource=\"cpu\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "Limits" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(machine_cpu_cores{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Total", - "range": true, - "refId": "Total" - } - ], - "title": "CPU Usage", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Real", - "mode": "reduceRow", - "reduce": { - "include": [ - "Real Linux", - "Real Windows" - ], - "reducer": "sum" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Real Linux": true, - "Real Windows": true, - "Time": true, - "Total Linux": true, - "Total Windows": true - }, - "indexByName": { - "Limits": 5, - "Real": 3, - "Real Linux": 1, - "Real Windows": 2, - "Requests": 4, - "Time": 0, - "Total": 8, - "Total Linux": 6, - "Total Windows": 7 - }, - "renameByName": {} - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 9 - }, - "id": 39, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"} - node_memory_MemAvailable_bytes{cluster=\"$cluster\", job=\"$job\"})", - "interval": "", - "legendFormat": "Real Linux", - "range": true, - "refId": "Real Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(windows_os_visible_memory_bytes{cluster=\"$cluster\"} - windows_memory_available_bytes{cluster=\"$cluster\"} - windows_memory_cache_bytes{cluster=\"$cluster\"})", - "hide": false, - "interval": "", - "legendFormat": "Real Windows", - "range": true, - "refId": "Real Windows" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{resource=\"memory\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "Requests" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{resource=\"memory\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "Limits" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(machine_memory_bytes{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Total", - "range": true, - "refId": "Total" - } - ], - "title": "RAM Usage", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Real", - "mode": "reduceRow", - "reduce": { - "include": [ - "Real Linux", - "Real Windows" - ], - "reducer": "mean" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Real Linux": true, - "Real Windows": true, - "Time": true - }, - "includeByName": {}, - "indexByName": { - "Limits": 5, - "Real": 3, - "Real Linux": 1, - "Real Windows": 2, - "Requests": 4, - "Time": 0, - "Total": 6 - }, - "renameByName": {} - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 2, - "x": 12, - "y": 9 - }, - "id": 62, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_status_phase{phase=\"Running\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Running Pods", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 71, - "panels": [], - "title": "Resources", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd", - "seriesBy": "last" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU %", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "scheme", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 0.5 - }, - { - "color": "red", - "value": 0.7 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 14 - }, - "id": 72, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "avg(sum by (instance, cpu) (rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])))", - "interval": "$resolution", - "legendFormat": "Linux", - "range": true, - "refId": "Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "1 - avg(rate(windows_cpu_time_total{cluster=\"$cluster\",mode=\"idle\"}[$__rate_interval]))", - "hide": false, - "interval": "$resolution", - "legendFormat": "Windows", - "range": true, - "refId": "Windows" - } - ], - "title": "Cluster CPU Utilization", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "CPU usage in %", - "mode": "reduceRow", - "reduce": { - "reducer": "mean" - }, - "replaceFields": true - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "MEMORY", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "scheme", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 0.5 - }, - { - "color": "red", - "value": 0.7 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 14 - }, - "id": 55, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max", - "min" - ], - "displayMode": "hidden", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"} - node_memory_MemAvailable_bytes{cluster=\"$cluster\", job=\"$job\"}) / sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"})", - "interval": "$resolution", - "legendFormat": "Linux", - "range": true, - "refId": "Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(windows_os_visible_memory_bytes{cluster=\"$cluster\"} - windows_memory_available_bytes{cluster=\"$cluster\"}) / sum(windows_os_visible_memory_bytes{cluster=\"$cluster\"})", - "hide": false, - "interval": "$resolution", - "legendFormat": "Windows", - "range": true, - "refId": "Windows" - } - ], - "title": "Cluster Memory Utilization", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Memory usage in %", - "mode": "reduceRow", - "reduce": { - "reducer": "mean" - }, - "replaceFields": true - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU CORES", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 46, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "10.4.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (namespace)\n+ on (namespace)\n(sum(rate(windows_container_cpu_usage_seconds_total{container_id!=\"\", cluster=\"$cluster\"}[$__rate_interval]) * on (container_id) group_left (container, pod, namespace) max by ( container, container_id, pod, namespace) (kube_pod_container_info{container_id!=\"\", cluster=\"$cluster\"}) OR kube_namespace_created{cluster=\"$cluster\"} * 0) by (namespace))", - "format": "time_series", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ namespace }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Utilization by namespace", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 22 - }, - "id": 50, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{image!=\"\", cluster=\"$cluster\"}) by (namespace)\n+ on (namespace)\n(sum(windows_container_memory_usage_commit_bytes{container_id!=\"\", cluster=\"$cluster\"} * on (container_id) group_left (container, pod, namespace) max by ( container, container_id, pod, namespace) (kube_pod_container_info{container_id!=\"\", cluster=\"$cluster\"}) OR kube_namespace_created{cluster=\"$cluster\"} * 0) by (namespace))", - "interval": "$resolution", - "legendFormat": "{{`{{ namespace }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Memory Utilization by namespace", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU %", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 54, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "avg(sum by (instance, cpu) (rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval]))) by (instance)", - "interval": "$resolution", - "legendFormat": "{{`{{ node }}`}}", - "range": true, - "refId": "Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "avg(sum by (instance,core) (rate(windows_cpu_time_total{mode!=\"idle\", cluster=\"$cluster\"}[$__rate_interval]))) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ node }}`}}", - "range": true, - "refId": "Windows" - } - ], - "title": "CPU Utilization by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "MEMORY", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 30 - }, - "id": 73, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(node_memory_MemTotal_bytes{cluster=\"$cluster\", job=\"$job\"} - node_memory_MemAvailable_bytes{cluster=\"$cluster\", job=\"$job\"}) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "range": true, - "refId": "Linux" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(windows_os_visible_memory_bytes{cluster=\"$cluster\"} - windows_memory_available_bytes{cluster=\"$cluster\"}) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "range": true, - "refId": "Windows" - } - ], - "title": "Memory Utilization by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "SECONDS", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 38 - }, - "id": 82, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_cfs_throttled_seconds_total{image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (namespace) > 0", - "interval": "$resolution", - "legendFormat": "{{`{{ namespace }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Throttled seconds by namespace", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "NB", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 38 - }, - "id": 83, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_cpu_core_throttles_total{cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "{{`{{ instance }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Core Throttled by instance", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 46 - }, - "id": 86, - "panels": [], - "title": "Kubernetes", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 47 - }, - "id": 84, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kube_pod_status_qos_class{cluster=\"$cluster\"}) by (qos_class)", - "interval": "", - "legendFormat": "{{`{{ qos_class }}`}} pods", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_info{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Total pods", - "range": true, - "refId": "B" - } - ], - "title": "Kubernetes Pods QoS classes", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 47 - }, - "id": 85, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kube_pod_status_reason{cluster=\"$cluster\"}) by (reason)", - "interval": "", - "legendFormat": "{{`{{ reason }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Kubernetes Pods Status Reason", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "points", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 56 - }, - "id": 87, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(container_oom_events_total{cluster=\"$cluster\"}[$__rate_interval])) by (namespace) > 0", - "interval": "", - "legendFormat": "{{`{{ namespace }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "OOM Events by namespace", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "points", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 56 - }, - "id": 88, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(kube_pod_container_status_restarts_total{cluster=\"$cluster\"}[$__rate_interval])) by (namespace) > 0", - "interval": "", - "legendFormat": "{{`{{ namespace }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Container Restarts by namespace", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 65 - }, - "id": 69, - "panels": [], - "title": "Network", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Dropped noisy virtual devices for readability.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 66 - }, - "id": 44, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_bytes_total{device!~\"(veth|azv|lxc).*\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (device)", - "interval": "$resolution", - "legendFormat": "Received : {{`{{ device }}`}}", - "range": true, - "refId": "Linux Received" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_bytes_total{device!~\"(veth|azv|lxc).*\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (device)", - "interval": "$resolution", - "legendFormat": "Transmitted : {{`{{ device }}`}}", - "range": true, - "refId": "Linux Transmitted" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(windows_net_bytes_received_total{cluster=\"$cluster\"}[$__rate_interval])) by (nic)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Received : {{`{{ nic }}`}}", - "range": true, - "refId": "Windows Received" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(windows_net_bytes_sent_total{cluster=\"$cluster\"}[$__rate_interval])) by (nic)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted : {{`{{ device }}`}}", - "range": true, - "refId": "Windows Transmitted" - } - ], - "title": "Global Network Utilization by device", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "DROPPED PACKETS", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 66 - }, - "id": 53, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_drop_total{cluster=\"$cluster\", job=\"$job\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Linux Packets dropped (receive)", - "range": true, - "refId": "Linux Packets dropped (receive)" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_drop_total{cluster=\"$cluster\", job=\"$job\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Linux Packets dropped (transmit)", - "range": true, - "refId": "Linux Packets dropped (transmit)" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(windows_net_packets_received_discarded_total{cluster=\"$cluster\"}[$__rate_interval]))", - "hide": false, - "interval": "$resolution", - "legendFormat": "Windows Packets dropped (receive)", - "range": true, - "refId": "Windows Packets dropped (receive)" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(windows_net_packets_outbound_discarded_total{cluster=\"$cluster\"}[$__rate_interval]))", - "hide": false, - "interval": "$resolution", - "legendFormat": "Windows Packets dropped (transmit)", - "range": true, - "refId": "Windows Packets dropped (transmit)" - } - ], - "title": "Network Saturation - Packets dropped", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "Packets dropped (receive)", - "mode": "reduceRow", - "reduce": { - "include": [ - "Linux Packets dropped (receive)", - "Windows Packets dropped (receive)" - ], - "reducer": "mean" - } - } - }, - { - "id": "calculateField", - "options": { - "alias": "Packets dropped (transmit)", - "mode": "reduceRow", - "reduce": { - "include": [ - "Linux Packets dropped (transmit)", - "Windows Packets dropped (transmit)" - ], - "reducer": "mean" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Linux Packets dropped (receive)": true, - "Linux Packets dropped (transmit)": true, - "Time": false, - "Windows Packets dropped (receive)": true, - "Windows Packets dropped (transmit)": true - }, - "includeByName": {}, - "indexByName": {}, - "renameByName": {} - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 74 - }, - "id": 79, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\"}[$__rate_interval])) by (namespace)\n+ on (namespace)\n(sum(rate(windows_container_network_receive_bytes_total{container_id!=\"\", cluster=\"$cluster\"}[$__rate_interval]) * on (container_id) group_left (container, pod, namespace) max by ( container, container_id, pod, namespace) (kube_pod_container_info{container_id!=\"\", cluster=\"$cluster\"}) OR kube_namespace_created{cluster=\"$cluster\"} * 0) by (namespace))", - "interval": "$resolution", - "legendFormat": "Received : {{`{{ namespace }}`}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "- (sum(rate(container_network_transmit_bytes_total{cluster=\"$cluster\"}[$__rate_interval])) by (namespace)\n+ on (namespace)\n(sum(rate(windows_container_network_transmit_bytes_total{container_id!=\"\", cluster=\"$cluster\"}[$__rate_interval]) * on (container_id) group_left (container, pod, namespace) max by ( container, container_id, pod, namespace) (kube_pod_container_info{container_id!=\"\", cluster=\"$cluster\"}) OR kube_namespace_created{cluster=\"$cluster\"} * 0) by (namespace)))", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted : {{`{{ namespace }}`}}", - "range": true, - "refId": "B" - } - ], - "title": "Network Received by namespace", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 74 - }, - "id": 80, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_bytes_total{cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "Received bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "Linux Received bytes" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "- sum(rate(node_network_transmit_bytes_total{cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "Linux Transmitted bytes" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(windows_net_bytes_received_total{cluster=\"$cluster\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Received bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "Windows Received bytes" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "- sum(rate(windows_net_bytes_sent_total{cluster=\"$cluster\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "Windows Transmitted bytes" - } - ], - "title": "Total Network Received (with all virtual devices) by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Dropped noisy virtual devices for readability.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 82 - }, - "id": 56, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_bytes_total{device!~\"(veth|azv|lxc|lo).*\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "Received bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "- sum(rate(node_network_transmit_bytes_total{device!~\"(veth|azv|lxc|lo).*\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(windows_net_bytes_received_total{nic!~\".*Virtual.*\",cluster=\"$cluster\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Received bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(windows_net_bytes_sent_total{nic!~\".*Virtual.*\",cluster=\"$cluster\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "D" - } - ], - "title": "Network Received (without loopback) by instance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Dropped noisy virtual devices for readability.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 82 - }, - "id": 81, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_bytes_total{device=\"lo\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "interval": "$resolution", - "legendFormat": "Received bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "- sum(rate(node_network_transmit_bytes_total{device=\"lo\", cluster=\"$cluster\", job=\"$job\"}[$__rate_interval])) by (instance)", - "hide": false, - "interval": "$resolution", - "legendFormat": "Transmitted bytes in {{`{{ instance }}`}}", - "range": true, - "refId": "B" - } - ], - "title": "Network Received (loopback only) by instance", - "type": "timeseries" - } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "", - "value": "" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": false, - "text": "", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(node_cpu_seconds_total{cluster=\"$cluster\"},job)", - "hide": 0, - "includeAll": false, - "multi": true, - "name": "job", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(node_cpu_seconds_total{cluster=\"$cluster\"},job)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / Views / Global", - "uid": "k8s_views_global", - "version": 39, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-views-global - namespace: prometheus ---- -apiVersion: v1 -data: - k8s-views-namespaces.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": {}, - "__requires": [ - { - "type": "panel", - "id": "gauge", - "name": "Gauge", - "version": "" - }, - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "10.3.1" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern 'Namespaces View' dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 38, - "panels": [], - "title": "Overview", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 50 - }, - { - "color": "red", - "value": 70 - } - ] - }, - "unit": "percentunit", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 46, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=~\"$namespace\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) / sum(machine_cpu_cores{cluster=\"$cluster\"})", - "instant": true, - "interval": "", - "legendFormat": "", - "range": false, - "refId": "A" - } - ], - "title": "Namespace(s) usage on total cluster CPU in %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 50 - }, - { - "color": "red", - "value": 70 - } - ] - }, - "unit": "percentunit", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 1 - }, - "id": 48, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{namespace=~\"$namespace\", image!=\"\", cluster=\"$cluster\"}) / sum(machine_memory_bytes{cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Namespace(s) usage on total cluster RAM in %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 12, - "x": 12, - "y": 1 - }, - "id": 32, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Running Pods", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_service_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Services", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_ingress_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Ingresses", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_deployment_labels{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Deployments", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_statefulset_labels{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Statefulsets", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_daemonset_labels{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Daemonsets", - "refId": "F" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_persistentvolumeclaim_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Persistent Volume Claims", - "refId": "G" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_hpa_labels{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Horizontal Pod Autoscalers", - "refId": "H" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_configmap_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Configmaps", - "refId": "I" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_secret_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Secrets", - "refId": "J" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_networkpolicy_labels{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Network Policies", - "refId": "K" - } - ], - "title": "Kubernetes Resource Count", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 8 - }, - "id": 62, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=~\"$namespace\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "", - "legendFormat": "Real", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{namespace=~\"$namespace\", resource=\"cpu\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{namespace=~\"$namespace\", resource=\"cpu\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(machine_cpu_cores{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Cluster Total", - "range": true, - "refId": "D" - } - ], - "title": "Namespace(s) CPU Usage in cores", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "bytes", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 8 - }, - "id": 64, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{namespace=~\"$namespace\", image!=\"\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Real", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_requests{namespace=~\"$namespace\", resource=\"memory\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Requests", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_resource_limits{namespace=~\"$namespace\", resource=\"memory\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Limits", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(machine_memory_bytes{cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Cluster Total", - "range": true, - "refId": "D" - } - ], - "title": "Namespace(s) RAM Usage in bytes", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 40, - "panels": [], - "title": "Resources", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU CORES", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 13 - }, - "id": 29, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=~\"$namespace\", image!=\"\", pod=~\"${created_by}.*\", cluster=\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU usage by Pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 13 - }, - "id": 30, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{namespace=~\"$namespace\", image!=\"\", pod=~\"${created_by}.*\", cluster=\"$cluster\"}) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Memory usage by Pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "SECONDS", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 21 - }, - "id": 68, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_cfs_throttled_seconds_total{namespace=~\"$namespace\", image!=\"\", pod=~\"${created_by}.*\", cluster=\"$cluster\"}[$__rate_interval])) by (pod) > 0", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Throttled seconds by pod", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 29 - }, - "id": 73, - "panels": [], - "title": "Kubernetes", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 70, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kube_pod_status_qos_class{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (qos_class)", - "interval": "", - "legendFormat": "{{`{{ qos_class }}`}} pods", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_info{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "hide": false, - "legendFormat": "Total pods", - "range": true, - "refId": "B" - } - ], - "title": "Kubernetes Pods QoS classes", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 30 - }, - "id": 72, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kube_pod_status_reason{cluster=\"$cluster\"}) by (reason)", - "interval": "", - "legendFormat": "{{`{{ reason }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Kubernetes Pods Status Reason", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "points", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 39 - }, - "id": 74, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(container_oom_events_total{namespace=~\"${namespace}\", cluster=\"$cluster\"}[$__rate_interval])) by (namespace, pod) > 0", - "interval": "", - "legendFormat": "namespace: {{`{{ namespace }}`}} - pod: {{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "OOM Events by namespace, pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "No data is generally a good thing here.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "points", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 39 - }, - "id": 75, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(kube_pod_container_status_restarts_total{namespace=~\"${namespace}\", cluster=\"$cluster\"}[$__rate_interval])) by (namespace, pod) > 0", - "interval": "", - "legendFormat": "namespace: {{`{{ namespace }}`}} - pod: {{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Container Restarts by namespace, pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 48 - }, - "id": 5, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_status_ready{namespace=~\"$namespace\", pod=~\"${created_by}.*\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Ready", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_status_running{namespace=~\"$namespace\", pod=~\"${created_by}.*\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Running", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_container_status_waiting{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Waiting", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_container_status_restarts_total{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Restarts Total", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "expr": "sum(kube_pod_container_status_terminated{namespace=~\"$namespace\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "Terminated", - "refId": "E" - } - ], - "title": "Nb of pods by state", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 48 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_pod_container_info{namespace=~\"$namespace\", pod=~\"${created_by}.*\", cluster=\"$cluster\"}) by (pod)", - "interval": "", - "legendFormat": "{{`{{ pod }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Nb of containers by pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 56 - }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kube_deployment_status_replicas_available{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (deployment)", - "interval": "", - "legendFormat": "{{`{{ deployment }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Replicas available by deployment", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 56 - }, - "id": 8, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(kube_deployment_status_replicas_unavailable{namespace=~\"$namespace\", pod=~\"${created_by}.*\", cluster=\"$cluster\"}) by (deployment)", - "interval": "", - "legendFormat": "{{`{{ deployment }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Replicas unavailable by deployment", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 64 - }, - "id": 42, - "panels": [], - "title": "Kubernetes Storage", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 65 - }, - "id": 65, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_capacity_bytes{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "refId": "A" - } - ], - "title": "Persistent Volumes - Capacity and usage in %", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 65 - }, - "id": 66, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}} - Used", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kubelet_volume_stats_capacity_bytes{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "hide": false, - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}} - Capacity", - "refId": "B" - } - ], - "title": "Persistent Volumes - Capacity and usage in bytes", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 73 - }, - "id": 27, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "1 - sum(kubelet_volume_stats_inodes_used{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_inodes{namespace=~\"$namespace\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "refId": "A" - } - ], - "title": "Persistent Volumes - Inodes", - "type": "timeseries" - } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": {}, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "namespace", - "options": [], - "query": { - "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_pod_info{namespace=~\"$namespace\", container!=\"\", cluster=\"$cluster\"},created_by_name)", - "description": "Can be used to filter on a specific deployment, statefulset or deamonset (only relevant panels).", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "created_by", - "options": [], - "query": { - "query": "label_values(kube_pod_info{namespace=~\"$namespace\", container!=\"\", cluster=\"$cluster\"},created_by_name)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / Views / Namespaces", - "uid": "k8s_views_ns", - "version": 34, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-views-namespaces - namespace: prometheus ---- -apiVersion: v1 -data: - k8s-views-nodes.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": {}, - "__requires": [ - { - "type": "panel", - "id": "gauge", - "name": "Gauge", - "version": "" - }, - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "10.3.1" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern 'Nodes View' dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 40, - "panels": [], - "title": "Overview", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 50 - }, - { - "color": "red", - "value": 70 - } - ] - }, - "unit": "percentunit", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 4, - "x": 0, - "y": 1 - }, - "id": 7, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": false, - "expr": "avg(sum by (cpu) (rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])))", - "instant": true, - "interval": "$resolution", - "legendFormat": "", - "refId": "A" - } - ], - "title": "CPU Usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 50 - }, - { - "color": "red", - "value": 70 - } - ] - }, - "unit": "percentunit", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 4, - "x": 4, - "y": 1 - }, - "id": 13, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": false, - "expr": "sum(node_memory_MemTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"} - node_memory_MemAvailable_bytes{instance=\"$instance\", cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"})", - "instant": true, - "interval": "$resolution", - "legendFormat": "", - "refId": "A" - } - ], - "title": "RAM Usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - }, - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 4, - "x": 8, - "y": 1 - }, - "id": 24, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kube_pod_info{node=\"$node\", cluster=\"$cluster\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Pods on node", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "inspect": false - }, - "links": [ - { - "targetBlank": true, - "title": "Pod details", - "url": "/d/k8s_views_pods/kubernetes-views-pods?${datasource:queryparam}&var-namespace=${__data.fields.namespace}&var-pod=${__data.fields.pod}&${resolution:queryparam}&${__url_time_range}" - } - ], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unitScale": true - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "pod" - }, - "properties": [ - { - "id": "custom.width", - "value": 416 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "priority_class" - }, - "properties": [ - { - "id": "custom.width", - "value": 176 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "pod_ip" - }, - "properties": [ - { - "id": "custom.width", - "value": 157 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "created_by_kind" - }, - "properties": [ - { - "id": "custom.width", - "value": 205 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "namespace" - }, - "properties": [ - { - "id": "custom.width", - "value": 263 - } - ] - } - ] - }, - "gridPos": { - "h": 11, - "w": 12, - "x": 12, - "y": 1 - }, - "id": 5, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "kube_pod_info{node=\"$node\", cluster=\"$cluster\"}", - "format": "table", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "List of pods on node ($node)", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "Value": true, - "__name__": true, - "container": true, - "created_by_kind": false, - "created_by_name": true, - "endpoint": true, - "env": true, - "host_ip": true, - "host_network": true, - "instance": true, - "job": true, - "node": true, - "project": true, - "prometheus_replica": true, - "service": true, - "uid": true - }, - "indexByName": { - "Time": 6, - "Value": 20, - "__name__": 7, - "container": 8, - "created_by_kind": 2, - "created_by_name": 9, - "endpoint": 10, - "env": 11, - "host_ip": 5, - "host_network": 12, - "instance": 13, - "job": 14, - "namespace": 1, - "node": 15, - "pod": 0, - "pod_ip": 3, - "priority_class": 4, - "project": 16, - "prometheus_replica": 17, - "service": 18, - "uid": 19 - }, - "renameByName": {} - } - }, - { - "id": "groupBy", - "options": { - "fields": { - "created_by_kind": { - "aggregations": [], - "operation": "groupby" - }, - "host_ip": { - "aggregations": [], - "operation": "groupby" - }, - "namespace": { - "aggregations": [ - "last" - ], - "operation": "groupby" - }, - "pod": { - "aggregations": [], - "operation": "groupby" - }, - "pod_ip": { - "aggregations": [], - "operation": "groupby" - }, - "priority_class": { - "aggregations": [], - "operation": "groupby" - } - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 3, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 0, - "y": 9 - }, - "id": 9, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": false, - "expr": "sum(rate(node_cpu_seconds_total{mode!~\"idle|iowait|steal\", instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "instant": true, - "interval": "$resolution", - "legendFormat": "", - "refId": "A" - } - ], - "title": "CPU Used", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 2, - "y": 9 - }, - "id": 11, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(machine_cpu_cores{node=\"$node\", cluster=\"$cluster\"})", - "interval": "$resolution", - "legendFormat": "", - "refId": "A" - } - ], - "title": "CPU Total", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "bytes", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 4, - "y": 9 - }, - "id": 15, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": false, - "expr": "sum(node_memory_MemTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"} - node_memory_MemAvailable_bytes{instance=\"$instance\", cluster=\"$cluster\"})", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "RAM Used", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "bytes", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 6, - "y": 9 - }, - "id": 17, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "machine_memory_bytes{node=\"$node\", cluster=\"$cluster\"}", - "instant": false, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "RAM Total", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 25228800 - }, - { - "color": "red", - "value": 31536000 - } - ] - }, - "unit": "s", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 4, - "x": 8, - "y": 9 - }, - "id": 18, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_time_seconds{instance=\"$instance\", cluster=\"$cluster\"} - node_boot_time_seconds{instance=\"$instance\", cluster=\"$cluster\"}", - "instant": false, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "uptime", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 38, - "panels": [], - "title": "Resources", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 13 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "avg(rate(node_cpu_seconds_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]) * 100) by (mode)", - "hide": false, - "instant": false, - "interval": "$resolution", - "legendFormat": "{{`{{ mode }}`}}", - "refId": "A" - } - ], - "title": "CPU Usage", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes", - "unitScale": true - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 13 - }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_MemTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"} - node_memory_MemFree_bytes{instance=\"$instance\", cluster=\"$cluster\"} - (node_memory_Cached_bytes{instance=\"$instance\", cluster=\"$cluster\"} + node_memory_Buffers_bytes{instance=\"$instance\", cluster=\"$cluster\"})", - "instant": false, - "interval": "$resolution", - "legendFormat": "RAM Used", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_MemTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "RAM Total", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_Cached_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "RAM Cache", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_Buffers_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "RAM Buffer", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_MemFree_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "RAM Free", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_SwapTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"} - node_memory_SwapFree_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "SWAP Used", - "refId": "F" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "node_memory_SwapTotal_bytes{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "SWAP Total", - "refId": "G" - } - ], - "title": "Memory Usage", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU Cores", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 26, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{node=\"$node\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}}", - "refId": "A" - } - ], - "title": "CPU usage by Pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 22 - }, - "id": 28, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{node=\"$node\", image!=\"\", cluster=\"$cluster\"}) by (pod)", - "interval": "$resolution", - "legendFormat": "{{`{{ pod }}`}}", - "refId": "A" - } - ], - "title": "Memory usage by Pod", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Number of times a CPU core has been throttled on an instance.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU CORES", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 66, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_cpu_core_throttles_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Nb of cpu core throttles", - "range": true, - "refId": "A" - } - ], - "title": "Number of CPU Core Throttled", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 38 - }, - "id": 44, - "panels": [], - "title": "System", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 39 - }, - "id": 48, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_load1{instance=\"$instance\", cluster=\"$cluster\"}", - "interval": "$resolution", - "legendFormat": "1m", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_load5{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "5m", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_load15{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "15m", - "range": true, - "refId": "C" - } - ], - "title": "System Load", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 39 - }, - "id": 46, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_context_switches_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "interval": "$resolution", - "intervalFactor": 1, - "legendFormat": "Context switches", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_intr_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "hide": false, - "interval": "$resolution", - "legendFormat": "Interrupts", - "range": true, - "refId": "B" - } - ], - "title": "Context Switches & Interrupts", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 47 - }, - "id": 49, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_filefd_maximum{instance=\"$instance\", cluster=\"$cluster\"}", - "instant": false, - "interval": "$resolution", - "legendFormat": "Maximum file descriptors", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_filefd_allocated{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "instant": false, - "interval": "$resolution", - "legendFormat": "Allocated file descriptors", - "refId": "B" - } - ], - "title": "File Descriptors", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 47 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_timex_estimated_error_seconds{instance=\"$instance\", cluster=\"$cluster\"}", - "instant": false, - "interval": "$resolution", - "intervalFactor": 1, - "legendFormat": "Estimated error in seconds", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_timex_maxerror_seconds{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "intervalFactor": 1, - "legendFormat": "Maximum error in seconds", - "range": true, - "refId": "B" - } - ], - "title": "Time Sync", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 55 - }, - "id": 36, - "panels": [], - "title": "Network", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "BANDWIDTH", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 56 - }, - "id": 20, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_bytes_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "In", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_bytes_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Out", - "range": true, - "refId": "B" - } - ], - "title": "Network usage (bytes)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 56 - }, - "id": 61, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(node_network_receive_errs_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "In", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_errs_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Out", - "range": true, - "refId": "B" - } - ], - "title": "Network errors", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 64 - }, - "id": 62, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(node_network_receive_packets_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "In", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_packets_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Out", - "range": true, - "refId": "B" - } - ], - "title": "Network usage (packet/s)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 64 - }, - "id": 64, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(node_network_receive_drop_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "hide": false, - "interval": "$resolution", - "legendFormat": "In", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "- sum(rate(node_network_transmit_drop_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]))", - "hide": false, - "interval": "$resolution", - "legendFormat": "Out", - "refId": "B" - } - ], - "title": "Network total drops", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 72 - }, - "id": 60, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_netstat_Tcp_CurrEstab{instance=\"$instance\", cluster=\"$cluster\"}", - "instant": false, - "interval": "$resolution", - "legendFormat": "TCP Currently Established", - "refId": "A" - } - ], - "title": "TCP Currently Established", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "NF Conntrack limit" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 72 - }, - "id": 63, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_nf_conntrack_entries{instance=\"$instance\", cluster=\"$cluster\"}", - "instant": false, - "interval": "$resolution", - "legendFormat": "NF Conntrack entries", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "node_nf_conntrack_entries_limit{instance=\"$instance\", cluster=\"$cluster\"}", - "hide": false, - "interval": "$resolution", - "legendFormat": "NF Conntrack limit", - "range": true, - "refId": "B" - } - ], - "title": "NF Conntrack", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 80 - }, - "id": 54, - "panels": [], - "title": "Kubernetes Storage", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 81 - }, - "id": 30, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_capacity_bytes{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "interval": "$resolution", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Persistent Volumes - Usage in %", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Used" - }, - "properties": [ - { - "id": "custom.width", - "value": 146 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.width", - "value": 167 - } - ] - } - ] - }, - "gridPos": { - "h": 16, - "w": 12, - "x": 12, - "y": 81 - }, - "id": 34, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kubelet_volume_stats_used_bytes{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "format": "table", - "hide": false, - "interval": "", - "legendFormat": "", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(kubelet_volume_stats_capacity_bytes{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim)", - "format": "table", - "hide": false, - "interval": "", - "legendFormat": "", - "refId": "B" - } - ], - "title": "Persistent Volumes - Usage in GB", - "transformations": [ - { - "id": "groupBy", - "options": { - "fields": { - "Value": { - "aggregations": [ - "lastNotNull" - ], - "operation": "aggregate" - }, - "Value #A": { - "aggregations": [ - "lastNotNull" - ], - "operation": "aggregate" - }, - "Value #B": { - "aggregations": [ - "lastNotNull" - ], - "operation": "aggregate" - }, - "persistentvolumeclaim": { - "aggregations": [], - "operation": "groupby" - } - } - } - }, - { - "id": "seriesToColumns", - "options": { - "byField": "persistentvolumeclaim" - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "Value #A (lastNotNull)": "Used", - "Value #B (lastNotNull)": "Total", - "persistentvolumeclaim": "Persistent Volume Claim" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 89 - }, - "id": 32, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(kubelet_volume_stats_inodes_used{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim) / sum(kubelet_volume_stats_inodes{node=\"$node\", cluster=\"$cluster\"}) by (persistentvolumeclaim) * 100", - "interval": "$resolution", - "legendFormat": "{{`{{ persistentvolumeclaim }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Persistent Volumes - Inodes", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 97 - }, - "id": 42, - "panels": [], - "title": "Node Storage", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 98 - }, - "id": 33, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "100 - ((node_filesystem_avail_bytes{instance=\"$instance\", cluster=\"$cluster\"} * 100) / node_filesystem_size_bytes{instance=\"$instance\", cluster=\"$cluster\"})", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ mountpoint }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "FS usage in %", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 98 - }, - "id": 59, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "100 - (node_filesystem_files_free{instance=\"$instance\", cluster=\"$cluster\"} / node_filesystem_files{instance=\"$instance\", cluster=\"$cluster\"} * 100)", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{ mountpoint }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "FS inode usage in %", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 106 - }, - "id": 52, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_disk_read_bytes_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "interval": "$resolution", - "legendFormat": "{{`{{device}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Reads by disk (bytes)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 106 - }, - "id": 57, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_disk_written_bytes_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{device}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Writes by disk (bytes)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "read/s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 114 - }, - "id": 51, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_disk_reads_completed_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "interval": "$resolution", - "legendFormat": "{{`{{device}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Completed reads by disk", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "write/s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 114 - }, - "id": 56, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_disk_writes_completed_total{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval])", - "hide": false, - "interval": "$resolution", - "legendFormat": "{{`{{device}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Completed writes by disk", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "io/s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 122 - }, - "id": 58, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(node_disk_io_now{instance=\"$instance\", cluster=\"$cluster\"}[$__rate_interval]) ", - "interval": "$resolution", - "legendFormat": "{{`{{device}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Disk(s) io/s", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 122 - }, - "id": 55, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right", - "showLegend": false - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(node_filesystem_device_error{instance=\"$instance\", cluster=\"$cluster\"}) by (mountpoint)", - "interval": "$resolution", - "legendFormat": "{{`{{ mountpoint }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "FS - Device Errors", - "type": "timeseries" - } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": {}, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info{cluster=\"$cluster\"}, node)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "node", - "options": [], - "query": { - "query": "label_values(kube_node_info{cluster=\"$cluster\"}, node)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": {}, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(node_uname_info{nodename=~\"(?i:($node))\"}, instance)", - "hide": 2, - "includeAll": false, - "multi": false, - "name": "instance", - "options": [], - "query": { - "query": "label_values(node_uname_info{nodename=~\"(?i:($node))\"}, instance)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / Views / Nodes", - "uid": "k8s_views_nodes", - "version": 29, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-views-nodes - namespace: prometheus ---- -apiVersion: v1 -data: - k8s-views-pods.json: | - { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__elements": [], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "8.3.4" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "5.0.0" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "gauge", - "name": "Gauge", - "version": "" - }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "This is a modern 'Pods View' dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 43, - "panels": [], - "targets": [ - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A" - } - ], - "title": "Information", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 12, - "x": 0, - "y": 1 - }, - "id": 2, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_info{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ created_by_kind }}`}}: {{`{{ created_by_name }}`}}", - "refId": "A" - } - ], - "title": "Created by", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "links": [ - { - "title": "", - "url": "/d/k8s_views_nodes/kubernetes-views-nodes?var-datasource=${datasource}&var-node=${__data.fields.node}" - } - ], - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 6, - "x": 12, - "y": 1 - }, - "id": 33, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_info{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ node }}`}}", - "refId": "A" - } - ], - "title": "Running on", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 6, - "x": 18, - "y": 1 - }, - "id": 41, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_info{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ pod_ip }}`}}", - "refId": "A" - } - ], - "title": "Pod IP", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgb(255, 255, 255)", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 5, - "x": 0, - "y": 3 - }, - "id": 52, - "options": { - "colorMode": "none", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_info{namespace=\"$namespace\", pod=\"$pod\", priority_class!=\"\", cluster=\"$cluster\"}", - "format": "time_series", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ priority_class }}`}}", - "range": false, - "refId": "A" - } - ], - "title": "Priority Class", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Burstable" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "BestEffort" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 2, - "w": 7, - "x": 5, - "y": 3 - }, - "id": 53, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_status_qos_class{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"} > 0", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ qos_class }}`}}", - "refId": "A" - } - ], - "title": "QOS Class", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "text", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 6, - "x": 12, - "y": 3 - }, - "id": 56, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_container_status_last_terminated_reason{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "{{`{{ reason }}`}}", - "refId": "A" - } - ], - "title": "Last Terminated Reason", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Panel only works when a single pod is selected.", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "text", - "value": null - }, - { - "color": "red", - "value": 1 - }, - { - "color": "#EAB839", - "value": 2 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 6, - "x": 18, - "y": 3 - }, - "id": 57, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [], - "fields": "", - "values": true - }, - "showPercentChange": false, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "kube_pod_container_status_last_terminated_exitcode{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}", - "instant": true, - "interval": "", - "legendFormat": "__auto", - "range": false, - "refId": "A" - } - ], - "title": "Last Terminated Exit Code", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 47, - "panels": [], - "targets": [ - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A" - } - ], - "title": "Resources", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 60 - }, - { - "color": "red", - "value": 75 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 3, - "x": 0, - "y": 6 - }, - "id": 39, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) / sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"})", - "instant": true, - "interval": "$resolution", - "legendFormat": "Requests", - "refId": "A" - } - ], - "title": "Total pod CPU Requests usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 60 - }, - { - "color": "red", - "value": 75 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 3, - "x": 3, - "y": 6 - }, - "id": 48, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) / sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"})", - "instant": true, - "interval": "$resolution", - "legendFormat": "Limits", - "refId": "A" - } - ], - "title": "Total pod CPU Limits usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "#EAB839", - "value": 80 - }, - { - "color": "red", - "value": 99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 3, - "x": 6, - "y": 6 - }, - "id": 40, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}) / sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"})", - "instant": true, - "interval": "$resolution", - "legendFormat": "Requests", - "refId": "A" - } - ], - "title": "Total pod RAM Requests usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 60 - }, - { - "color": "red", - "value": 75 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 3, - "x": 9, - "y": 6 - }, - "id": 49, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}) / sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"}) ", - "instant": true, - "interval": "$resolution", - "legendFormat": "Limits", - "refId": "B" - } - ], - "title": "Total pod RAM Limits usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "filterable": false, - "inspect": false, - "minWidth": 100 - }, - "decimals": 4, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Memory Requests" - }, - "properties": [ - { - "id": "unit", - "value": "bytes" - }, - { - "id": "decimals", - "value": 2 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Memory Limits" - }, - "properties": [ - { - "id": "unit", - "value": "bytes" - }, - { - "id": "decimals", - "value": 2 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Memory Used" - }, - "properties": [ - { - "id": "unit", - "value": "bytes" - }, - { - "id": "decimals", - "value": 2 - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 6 - }, - "id": 38, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "10.4.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)", - "format": "table", - "hide": false, - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", container!=\"\", cluster=\"$cluster\"}) by (container)", - "format": "table", - "hide": false, - "instant": true, - "range": false, - "refId": "F" - } - ], - "title": "Resources by container", - "transformations": [ - { - "id": "seriesToColumns", - "options": { - "byField": "container" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "Time 1": true, - "Time 2": true, - "Time 4": true, - "__name__": true, - "__name__ 1": true, - "__name__ 2": true, - "__name__ 3": true, - "__name__ 4": true, - "container": false, - "endpoint": true, - "endpoint 2": true, - "endpoint 3": true, - "endpoint 4": true, - "instance": true, - "instance 2": true, - "instance 3": true, - "instance 4": true, - "job": true, - "job 2": true, - "job 3": true, - "job 4": true, - "namespace": true, - "namespace 2": true, - "namespace 3": true, - "namespace 4": true, - "node": true, - "node 2": true, - "node 3": true, - "node 4": true, - "pod": true, - "pod 2": true, - "pod 3": true, - "pod 4": true, - "resource 1": true, - "resource 2": true, - "resource 3": true, - "resource 4": true, - "service": true, - "service 2": true, - "service 3": true, - "service 4": true, - "uid 1": true, - "uid 2": true, - "uid 3": true, - "uid 4": true, - "unit 1": true, - "unit 2": true, - "unit 3": true, - "unit 4": true - }, - "indexByName": { - "Time 1": 7, - "Time 2": 8, - "Time 3": 9, - "Time 4": 10, - "Time 5": 11, - "Time 6": 12, - "Value #A": 2, - "Value #B": 3, - "Value #C": 5, - "Value #D": 6, - "Value #E": 1, - "Value #F": 4, - "container": 0 - }, - "renameByName": { - "Value #A": "CPU Requests", - "Value #B": "CPU Limits", - "Value #C": "Memory Requests", - "Value #D": "Memory Limits", - "Value #E": "CPU Used", - "Value #F": "Memory Used", - "container": "Container" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Percent", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 20 - }, - { - "color": "green", - "value": 30 - }, - { - "color": "yellow", - "value": 70 - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 14 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) / sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "interval": "$resolution", - "legendFormat": "{{`{{ container }}`}} REQUESTS", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) / sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"cpu\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "hide": false, - "legendFormat": "{{`{{ container }}`}} LIMITS", - "range": true, - "refId": "B" - } - ], - "title": "CPU Usage / Requests & Limits by container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "thresholds" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Percent", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 20 - }, - { - "color": "green", - "value": 30 - }, - { - "color": "#EAB839", - "value": 70 - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 14 - }, - "id": 30, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}) by (container) / sum(kube_pod_container_resource_requests{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "interval": "", - "legendFormat": "{{`{{ container }}`}} REQUESTS", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", cluster=\"$cluster\"}) by (container) / sum(kube_pod_container_resource_limits{namespace=\"$namespace\", pod=~\"$pod\", resource=\"memory\", job=~\"$job\", cluster=\"$cluster\"}) by (container)", - "hide": false, - "legendFormat": "{{`{{ container }}`}} LIMITS", - "range": true, - "refId": "B" - } - ], - "title": "Memory Usage / Requests & Limits by container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "CPU Cores", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 4, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "limit" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#F2495C", - "mode": "fixed" - } - }, - { - "id": "custom.fillOpacity", - "value": 0 - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 22 - }, - "id": 29, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)", - "interval": "$resolution", - "legendFormat": "{{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Usage by container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Bytes", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 22 - }, - "id": 51, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\", pod=~\"$pod\", image!=\"\", container!=\"\", cluster=\"$cluster\"}) by (container)", - "interval": "", - "legendFormat": "{{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Memory Usage by container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "SECONDS", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 59, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(rate(container_cpu_cfs_throttled_seconds_total{namespace=~\"$namespace\", pod=~\"$pod\", image!=\"\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)", - "interval": "$resolution", - "legendFormat": "{{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "CPU Throttled seconds by container", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 38 - }, - "id": 62, - "panels": [], - "title": "Kubernetes", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "thresholds" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Percent", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 20 - }, - { - "color": "green", - "value": 30 - }, - { - "color": "#EAB839", - "value": 70 - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 39 - }, - "id": 60, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(container_oom_events_total{namespace=\"${namespace}\", pod=\"${pod}\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)", - "interval": "", - "legendFormat": "{{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "OOM Events by container", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "thresholds" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Percent", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "area" - } - }, - "mappings": [], - "max": 1, - "min": 0, - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 20 - }, - { - "color": "green", - "value": 30 - }, - { - "color": "#EAB839", - "value": 70 - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 39 - }, - "id": 61, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "editorMode": "code", - "exemplar": true, - "expr": "sum(increase(kube_pod_container_status_restarts_total{namespace=~\"${namespace}\", pod=\"${pod}\", container!=\"\", job=~\"$job\", cluster=\"$cluster\"}[$__rate_interval])) by (container)", - "interval": "", - "legendFormat": "{{`{{ container }}`}}", - "range": true, - "refId": "A" - } - ], - "title": "Container Restarts by container", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 47 - }, - "id": 45, - "panels": [], - "targets": [ - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A" - } - ], - "title": "Network", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 48 - }, - "id": 31, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(container_network_receive_bytes_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Received", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_bytes_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Transmitted", - "refId": "B" - } - ], - "title": "Network - Bandwidth", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 48 - }, - "id": 34, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(container_network_receive_packets_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Received", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_packets_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Transmitted", - "refId": "B" - } - ], - "title": "Network - Packets Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 56 - }, - "id": 36, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(container_network_receive_packets_dropped_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Received", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_packets_dropped_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Transmitted", - "refId": "B" - } - ], - "title": "Network - Packets Dropped", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 25, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 56 - }, - "id": 37, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "8.3.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(rate(container_network_receive_errors_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Received", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "- sum(rate(container_network_transmit_errors_total{namespace=\"$namespace\", pod=~\"$pod\", cluster=\"$cluster\"}[$__rate_interval]))", - "interval": "$resolution", - "legendFormat": "Transmitted", - "refId": "B" - } - ], - "title": "Network - Errors", - "type": "timeseries" - } - ], - "refresh": "30s", - "schemaVersion": 39, - "tags": [ - "Kubernetes", - "Prometheus" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "", - "value": "" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "isNone": true, - "selected": false, - "text": "None", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_node_info,cluster)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "cluster", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_node_info,cluster)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "monitoring", - "value": "monitoring" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", - "hide": 0, - "includeAll": false, - "multi": false, - "name": "namespace", - "options": [], - "query": { - "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", - "refId": "Prometheus-namespace-Variable-Query" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_pod_info{namespace=\"$namespace\", cluster=\"$cluster\"}, pod)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "pod", - "options": [], - "query": { - "query": "label_values(kube_pod_info{namespace=\"$namespace\", cluster=\"$cluster\"}, pod)", - "refId": "Prometheus-pod-Variable-Query" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "30s", - "value": "30s" - }, - "hide": 0, - "includeAll": false, - "multi": false, - "name": "resolution", - "options": [ - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "15s", - "value": "15s" - }, - { - "selected": true, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "3m", - "value": "3m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - } - ], - "query": "1s, 15s, 30s, 1m, 3m, 5m", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": false, - "text": "kube-state-metrics", - "value": "kube-state-metrics" - }, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "definition": "label_values(kube_pod_info{namespace=\"$namespace\", cluster=\"$cluster\"},job)", - "hide": 0, - "includeAll": false, - "multi": true, - "name": "job", - "options": [], - "query": { - "qryType": 1, - "query": "label_values(kube_pod_info{namespace=\"$namespace\", cluster=\"$cluster\"},job)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "type": "query" - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Kubernetes / Views / Pods", - "uid": "k8s_views_pods", - "version": 28, - "weekStart": "" - } -kind: ConfigMap -metadata: - annotations: - grafana_folder: Kubernetes - labels: - grafana_dashboard: "1" - name: dashboards-k8s-views-pods - namespace: prometheus diff --git a/attic/templates/resources/dashboards/gitlab-runner.yaml b/attic/templates/resources/dashboards/gitlab-runner.yaml deleted file mode 100644 index dc298651..00000000 --- a/attic/templates/resources/dashboards/gitlab-runner.yaml +++ /dev/null @@ -1,1822 +0,0 @@ -{{ if .Values.gitlab_runner.enabled }} -apiVersion: v1 -kind: ConfigMap -data: - gitlab-runner.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Metrics from gitlab runners", - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": 14016, - "graphTooltip": 1, - "id": 31, - "iteration": 1697700881148, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 43, - "panels": [], - "repeat": "app", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "refId": "A" - } - ], - "title": "About $app", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 5, - "w": 2, - "x": 0, - "y": 1 - }, - "id": 40, - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "
\n \n
", - "mode": "html" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "transparent": true, - "type": "text" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-blue", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 5, - "x": 2, - "y": 1 - }, - "id": 12, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "/^version$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "gitlab_runner_version_info{app=~\"^$app$\"}", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "current version", - "transparent": true, - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-blue", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 7, - "y": 1 - }, - "id": 41, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "/^Value$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "gitlab_runner_concurrent{app=~\"^$app$\"}", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "Concurrent job", - "range": false, - "refId": "A" - } - ], - "title": "Global concurrent jobs", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "names": [ - "kubernetes_pod_name", - "Value" - ] - } - } - } - ], - "transparent": true, - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-blue", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 11, - "y": 1 - }, - "id": 44, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "/^Value$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "gitlab_runner_limit{app=~\"^$app$\"}", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{runner}}`}}", - "range": false, - "refId": "A" - } - ], - "title": "Runner limits by token", - "transparent": true, - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "-1": { - "text": "no limit" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-blue", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 5, - "x": 14, - "y": 1 - }, - "id": 49, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "/^Value$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "gitlab_runner_jobs_total{app=~\"^$app$\"}", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{runner}}`}}", - "range": false, - "refId": "A" - } - ], - "title": "Total jobs executed", - "transparent": true, - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "-1": { - "text": "no limit" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-blue", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 5, - "x": 19, - "y": 1 - }, - "id": 54, - "interval": "30s", - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "/^Value$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(gitlab_runner_failed_jobs_total{app=~\"^$app$\"}) by (runner)", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "__auto", - "range": false, - "refId": "A" - } - ], - "title": "Total failed jobs", - "transparent": true, - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 6 - }, - "id": 32, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "refId": "A" - } - ], - "title": "General", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 100, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 7 - }, - "id": 64, - "interval": "30s", - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "sum", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "delta(gitlab_runner_jobs_total{app=~\"^$app$\"} [1m]) ", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "30s", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{runner}}`}} ", - "refId": "B" - } - ], - "title": "Executed jobs", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 100, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 7 - }, - "id": 53, - "interval": "30s", - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "sum", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(gitlab_runner_jobs{state=\"running\",app=~\"^$app$\"}) by (app,job,executor_stage,stage)", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{job}}`}} : {{`{{executor_stage}}`}} : {{`{{stage}}`}} ", - "refId": "B" - } - ], - "title": "Runnig jobs phase", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "duration", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 63, - "interval": "30s", - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "sum", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum (rate(gitlab_runner_job_duration_seconds_sum [1m]) / rate(gitlab_runner_job_duration_seconds_count [1m])) by (app,runner,job,)", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "30s", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{runner}}`}} : {{`{{job}}`}}", - "refId": "A" - } - ], - "title": "Average duration of jobs", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 100, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 36, - "interval": "30s", - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "sum", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Total", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "sum(delta(gitlab_runner_errors_total{app=~\"^$app$\"} [1m])) by (app,level)", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{level}}`}}", - "range": true, - "refId": "A" - } - ], - "title": "The number of caught errors", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 5, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 25 - }, - "id": 34, - "interval": "30s", - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "sum", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last", - "sortDesc": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "exemplar": false, - "expr": "delta(gitlab_runner_api_request_statuses_total{app=~\"^$app$\"} [1m])", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : api {{`{{endpoint}}`}} : status {{`{{status}}`}}", - "refId": "A" - } - ], - "title": "Total number of api requests", - "transparent": true, - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 34 - }, - "id": 28, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "refId": "A" - } - ], - "title": "Concurrency", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 35 - }, - "id": 24, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "gitlab_runner_request_concurrency{app=~\"^$app$\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{runner}}`}}", - "refId": "A" - } - ], - "title": "The current number of concurrent requests for a new job", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 1, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 35 - }, - "id": 22, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "delta(gitlab_runner_request_concurrency_exceeded_total{app=~\"^$app$\"} [2m])", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} : {{`{{ runner}}`}} ", - "refId": "A" - } - ], - "title": "Counter tracking exceeding of request concurrency", - "transparent": true, - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 44 - }, - "id": 52, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6DmHLoFMz" - }, - "refId": "A" - } - ], - "title": "Process", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "(user and system)", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "rate", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 3, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 45 - }, - "id": 47, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "rate(process_cpu_seconds_total{app=~\"^$app$\"} [1m]) * 100", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} ", - "range": true, - "refId": "A" - } - ], - "title": " CPU time spent ", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "count", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 45 - }, - "id": 48, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "process_open_fds{app=~\"^$app$\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} ", - "refId": "A" - } - ], - "title": "Number of open file descriptors", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "usage", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 5, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 54 - }, - "id": 45, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "process_virtual_memory_bytes{app=~\"^$app$\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} ", - "refId": "A" - } - ], - "title": "Virtual memory size in bytes", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "usage", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 5, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 54 - }, - "id": 46, - "links": [], - "options": { - "legend": { - "calcs": [ - "mean", - "max", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "9.5.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "process_resident_memory_bytes{app=~\"^$app$\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{`{{app}}`}} ", - "refId": "A" - } - ], - "title": "Resident memory size in bytes", - "transparent": true, - "type": "timeseries" - } - ], - "refresh": "1m", - "schemaVersion": 36, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "isNone": true, - "selected": false, - "text": "None", - "value": "" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(gitlab_runner_api_request_statuses_total, app)", - "hide": 0, - "includeAll": false, - "multi": true, - "name": "app", - "options": [], - "query": { - "query": "label_values(gitlab_runner_api_request_statuses_total, app)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-3h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "browser", - "title": "Gitlab Runner Metrics", - "uid": "jTW2jWQmz", - "version": 1, - "weekStart": "" - } -metadata: - name: prom-gitlab-runner-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" -{{- end }} diff --git a/attic/templates/resources/dashboards/persistent-volume-usage.yaml b/attic/templates/resources/dashboards/persistent-volume-usage.yaml deleted file mode 100644 index 40e123ef..00000000 --- a/attic/templates/resources/dashboards/persistent-volume-usage.yaml +++ /dev/null @@ -1,1592 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: persistent-volumes - namespace: prometheus - labels: - grafana_dashboard: "1" - annotations: - grafana_folder: Kubernetes -data: - persistent-volumes.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "limit": 100, - "name": "Annotations & Alerts", - "showIn": 0, - "type": "dashboard" - } - ] - }, - "description": "Monitors all persistent volumes that exists within a Kubernetes cluster. Prometheus is used as datasource. ", - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": 13646, - "graphTooltip": 0, - "id": 48, - "links": [], - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 26, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Alerts", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-orange", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 0, - "y": 1 - }, - "id": 22, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "(\n count (\n (kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"})\n and\n (predict_linear(kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"}[1d], 2 * 24 * 60 * 60) < 0)\n )\n)\nor\nvector(0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs Full in 2 days - Based on Daily Usage", - "transformations": [ - { - "id": "organize", - "options": {} - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-orange", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 8, - "y": 1 - }, - "id": 28, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "(\n count (\n (kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"})\n and\n (predict_linear(kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"}[1d], 5 * 24 * 60 * 60) < 0)\n )\n)\nor\nvector(0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs Full in 5 days - Based on Daily Usage", - "transformations": [ - { - "id": "organize", - "options": {} - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-orange", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 27, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "(\n count (\n (kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"})\n and\n (predict_linear(kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"}[1d], 7 * 24 * 60 * 60) < 0)\n )\n)\nor\nvector(0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs Full in 1 Week - Based on Daily Usage", - "transformations": [ - { - "id": "organize", - "options": {} - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "semi-dark-red", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-red", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 0, - "y": 5 - }, - "id": 21, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "count (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"} ) and (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"} )) / (max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_capacity_bytes{namespace=~\"${k8s_namespace}\"} )) >= (${warning_threshold} / 100)) or vector (0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs Above Warning Threshold", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "semi-dark-red", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-red", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 8, - "y": 5 - }, - "id": 24, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "count((kube_persistentvolumeclaim_status_phase{namespace=~\"${k8s_namespace}\",phase=\"Pending\"}==1)) or vector(0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs in Pending State", - "transformations": [ - { - "id": "organize", - "options": {} - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "semi-dark-red", - "value": null - }, - { - "color": "light-green", - "value": -0.0001 - }, - { - "color": "semi-dark-red", - "value": 0.0001 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 8, - "x": 16, - "y": 5 - }, - "id": 23, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "count((kube_persistentvolumeclaim_status_phase{namespace=~\"${k8s_namespace}\",phase=\"Lost\"}==1)) or vector(0)", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "PVCs in Lost State", - "transformations": [ - { - "id": "organize", - "options": {} - } - ], - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 9 - }, - "id": 17, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Usage statistics", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "cellOptions": { - "type": "auto" - }, - "filterable": false, - "inspect": false - }, - "mappings": [], - "noValue": "--", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Used (%)" - }, - "properties": [ - { - "id": "custom.cellOptions", - "value": { - "mode": "gradient", - "type": "gauge" - } - }, - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - }, - { - "color": "semi-dark-yellow", - "value": 70 - }, - { - "color": "dark-red", - "value": 80 - } - ] - } - }, - { - "id": "decimals", - "value": 1 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Status" - }, - "properties": [ - { - "id": "custom.cellOptions", - "value": { - "mode": "gradient", - "type": "color-background" - } - }, - { - "id": "mappings", - "value": [ - { - "options": { - "0": { - "text": "Bound" - }, - "1": { - "text": "Pending" - }, - "2": { - "text": "Lost" - } - }, - "type": "value" - } - ] - }, - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { - "color": "light-green", - "value": null - }, - { - "color": "light-green", - "value": 0 - }, - { - "color": "semi-dark-orange", - "value": 1 - }, - { - "color": "semi-dark-red", - "value": 2 - } - ] - } - }, - { - "id": "noValue", - "value": "--" - }, - { - "id": "custom.align", - "value": "center" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Namespace" - }, - "properties": [ - { - "id": "custom.width", - "value": 120 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Status" - }, - "properties": [ - { - "id": "custom.width", - "value": 80 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Capacity (GiB)" - }, - "properties": [ - { - "id": "custom.width", - "value": 120 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Used (GiB)" - }, - "properties": [ - { - "id": "custom.width", - "value": 120 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Available (GiB)" - }, - "properties": [ - { - "id": "custom.width", - "value": 120 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "StorageClass" - }, - "properties": [ - { - "id": "custom.width", - "value": 150 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "PersistentVolumeClaim" - }, - "properties": [ - { - "id": "custom.width", - "value": 370 - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 24, - "x": 0, - "y": 10 - }, - "id": 29, - "interval": "", - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "frameIndex": 2, - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Used (%)" - } - ] - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": " sum by (persistentvolumeclaim,namespace,storageclass,volumename) (kube_persistentvolumeclaim_info{namespace=~\"${k8s_namespace}\"})", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum by (persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace=~\"${k8s_namespace}\"}/1024/1024/1024)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum by (persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}/1024/1024/1024)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum by (persistentvolumeclaim) (kubelet_volume_stats_available_bytes{namespace=~\"${k8s_namespace}\"}/1024/1024/1024)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum(kube_persistentvolumeclaim_status_phase{namespace=~\"${k8s_namespace}\",phase=~\"(Pending|Lost)\"}) by (persistentvolumeclaim) + sum(kube_persistentvolumeclaim_status_phase{namespace=~\"${k8s_namespace}\",phase=~\"(Lost)\"}) by (persistentvolumeclaim)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "sum by (persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}/kubelet_volume_stats_capacity_bytes{namespace=~\"${k8s_namespace}\"} * 100)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "F" - } - ], - "title": "Persistent Volume Claim", - "transformations": [ - { - "id": "seriesToColumns", - "options": { - "byField": "persistentvolumeclaim" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "Time 1": true, - "Time 2": true, - "Time 3": true, - "Time 4": true, - "Time 5": true, - "Time 6": true, - "Value #A": true - }, - "indexByName": {}, - "renameByName": { - "Time 1": "", - "Time 2": "", - "Time 3": "", - "Time 4": "", - "Time 5": "", - "Time 6": "", - "Value #A": "", - "Value #B": "Capacity (GiB)", - "Value #C": "Used (GiB)", - "Value #D": "Available (GiB)", - "Value #E": "Status", - "Value #F": "Used (%)", - "namespace": "Namespace", - "persistentvolumeclaim": "PersistentVolumeClaim", - "storageclass": "StorageClass", - "volumename": "PhysicalVolume" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "custom": { - "cellOptions": { - "type": "auto" - }, - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 24, - "x": 0, - "y": 22 - }, - "id": 7, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Status" - } - ] - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "kube_storageclass_info", - "format": "table", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Storage Class", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "Value": true, - "__name__": true, - "app_kubernetes_io_instance": true, - "app_kubernetes_io_name": true, - "instance": true, - "job": true, - "kubernetes_namespace": true, - "kubernetes_pod_name": true, - "pod_template_hash": true - }, - "indexByName": { - "Time": 1, - "Value": 13, - "__name__": 2, - "app_kubernetes_io_instance": 3, - "app_kubernetes_io_name": 4, - "instance": 5, - "job": 6, - "kubernetes_namespace": 7, - "kubernetes_pod_name": 8, - "pod_template_hash": 9, - "provisioner": 10, - "reclaimPolicy": 11, - "storageclass": 0, - "volumeBindingMode": 12 - }, - "renameByName": { - "provisioner": "Provisioner", - "reclaimPolicy": "ReclaimPolicy", - "storageclass": "StorageClass", - "volumeBindingMode": "VolumeBindingMode" - } - } - }, - { - "id": "groupBy", - "options": { - "fields": { - "Provisioner": { - "aggregations": [], - "operation": "groupby" - }, - "ReclaimPolicy": { - "aggregations": [], - "operation": "groupby" - }, - "StorageClass": { - "aggregations": [], - "operation": "groupby" - }, - "VolumeBindingMode": { - "aggregations": [], - "operation": "groupby" - } - } - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 27 - }, - "id": 15, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Graphical usage data ", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 12, - "w": 24, - "x": 0, - "y": 28 - }, - "id": 9, - "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max", - "min" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "pluginVersion": "7.2.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "(max by (persistentvolumeclaim,namespace) (kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}))", - "interval": "", - "legendFormat": "{{`{{namespace}}`}} ({{`{{persistentvolumeclaim}}`}})", - "refId": "A" - } - ], - "title": "All Running PVCs Used Bytes", - "type": "timeseries" - }, - { - "collapsed": true, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 40 - }, - "id": 19, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 41 - }, - "hiddenSeries": false, - "id": 11, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.2.1", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "rate(kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}[1h])", - "instant": false, - "interval": "", - "legendFormat": "{{`{{namespace}}`}} ({{`{{persistentvolumeclaim}}`}})", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Hourly Volume Usage Rate", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "binBps", - "logBase": 1, - "show": true - }, - { - "format": "Date & time", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 48 - }, - "hiddenSeries": false, - "id": 12, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.2.1", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "rate(kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}[1d])", - "interval": "", - "legendFormat": "{{`{{namespace}}`}} ({{`{{persistentvolumeclaim}}`}})", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Daily Volume Usage Rate", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "binBps", - "logBase": 1, - "show": true - }, - { - "format": "Date & time", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 55 - }, - "hiddenSeries": false, - "id": 13, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.2.1", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "expr": "rate(kubelet_volume_stats_used_bytes{namespace=~\"${k8s_namespace}\"}[1w])", - "instant": false, - "interval": "", - "legendFormat": "{{`{{namespace}}`}} ({{`{{persistentvolumeclaim}}`}})", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Weekly Volume Usage Rate", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "binBps", - "logBase": 1, - "show": true - }, - { - "format": "Date & time", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - } - ], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Usage Rate", - "type": "row" - } - ], - "refresh": "1m", - "schemaVersion": 39, - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "prometheus" - }, - "hide": 0, - "includeAll": false, - "label": "Datasource", - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": ".*", - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(namespace)", - "hide": 0, - "includeAll": true, - "label": "Namespace", - "multi": true, - "name": "k8s_namespace", - "options": [], - "query": "label_values(namespace)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "80", - "value": "80" - }, - "hide": 2, - "label": "PVC % Used Warning Threshold", - "name": "warning_threshold", - "options": [ - { - "selected": true, - "text": "80", - "value": "80" - } - ], - "query": "80", - "skipUrlSync": false, - "type": "textbox" - } - ] - }, - "time": { - "from": "now-24h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "kubernetes-persistent-volumes", - "uid": "peR80gTGk", - "version": 1, - "weekStart": "" - } diff --git a/attic/templates/resources/dashboards/rabbitmq.yaml b/attic/templates/resources/dashboards/rabbitmq.yaml deleted file mode 100644 index 517da704..00000000 --- a/attic/templates/resources/dashboards/rabbitmq.yaml +++ /dev/null @@ -1,372 +0,0 @@ -{{- if .Values.rabbitmq_operator.enabled }} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: rabbitmq-overview-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" -data: - # https://grafana.com/grafana/dashboards/10991 - rabbitmq-overview-dashboard.json.url: "https://github.com/rabbitmq/rabbitmq-server/raw/e57c579d1a71b283469defdd0d6d45313e6d6daf/deps/rabbitmq_prometheus/docker/grafana/dashboards/RabbitMQ-Overview.json" ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: rabbitmq-queue-grafana-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" -data: - rabbitmq-queue-grafana-dashboard.json: |- - { - "__inputs":[ - { - "name":"DS_PROMETHEUS", - "label":"prometheus", - "description":"", - "type":"datasource", - "pluginId":"prometheus", - "pluginName":"Prometheus" - } - ], - "__elements":{ - - }, - "__requires":[ - { - "type":"grafana", - "id":"grafana", - "name":"Grafana", - "version":"8.3.4" - }, - { - "type":"datasource", - "id":"prometheus", - "name":"Prometheus", - "version":"1.0.0" - }, - { - "type":"panel", - "id":"timeseries", - "name":"Time series", - "version":"" - } - ], - "annotations":{ - "list":[ - { - "builtIn":1, - "datasource":{ - "type":"datasource", - "uid":"grafana" - }, - "enable":true, - "hide":true, - "iconColor":"rgba(0, 211, 255, 1)", - "name":"Annotations & Alerts", - "target":{ - "limit":100, - "matchAny":false, - "tags":[ - - ], - "type":"dashboard" - }, - "type":"dashboard" - } - ] - }, - "editable":true, - "fiscalYearStartMonth":0, - "graphTooltip":0, - "id":null, - "links":[ - - ], - "liveNow":false, - "panels":[ - { - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "fieldConfig":{ - "defaults":{ - "color":{ - "mode":"palette-classic" - }, - "custom":{ - "axisCenteredZero":false, - "axisColorMode":"text", - "axisLabel":"Messages", - "axisPlacement":"left", - "axisSoftMin":0, - "barAlignment":0, - "drawStyle":"line", - "fillOpacity":0, - "gradientMode":"none", - "hideFrom":{ - "graph":false, - "legend":false, - "tooltip":false, - "viz":false - }, - "lineInterpolation":"linear", - "lineWidth":1, - "pointSize":5, - "scaleDistribution":{ - "type":"linear" - }, - "showPoints":"auto", - "spanNulls":false, - "stacking":{ - "group":"A", - "mode":"none" - }, - "thresholdsStyle":{ - "mode":"off" - } - }, - "mappings":[ - - ], - "thresholds":{ - "mode":"absolute", - "steps":[ - { - "color":"green", - "value":null - }, - { - "color":"red", - "value":80 - } - ] - } - }, - "overrides":[ - { - "matcher":{ - "id":"byName", - "options":"Consumers" - }, - "properties":[ - { - "id":"custom.axisPlacement", - "value":"right" - }, - { - "id":"unit", - "value":"prefix:" - }, - { - "id":"custom.axisLabel", - "value":"Consumers" - } - ] - }, - { - "matcher":{ - "id":"byName", - "options":"Messages" - }, - "properties":[ - { - "id":"custom.drawStyle", - "value":"line" - }, - { - "id":"custom.fillOpacity", - "value":0 - } - ] - } - ] - }, - "gridPos":{ - "h":20, - "w":24, - "x":0, - "y":0 - }, - "id":2, - "options":{ - "legend":{ - "calcs":[ - - ], - "displayMode":"list", - "placement":"bottom", - "showLegend":true - }, - "tooltip":{ - "mode":"single", - "sort":"none" - } - }, - "targets":[ - { - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "editorMode":"code", - "expr":"(rabbitmq_detailed_queue_messages{namespace=\"$namespace\", queue=\"$queue\"} * on (instance, job) rabbitmq_identity_info{namespace=\"$namespace\",rabbitmq_cluster=\"$rabbitmq_cluster\"})", - "legendFormat":"Messages ({{`{{job}}`}} | {{`{{instance}}`}})", - "range":true, - "refId":"A" - }, - { - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "editorMode":"code", - "expr":"rabbitmq_detailed_queue_consumers{namespace=\"$namespace\", queue=\"$queue\"} * on (instance, job) rabbitmq_identity_info{namespace=\"$namespace\",rabbitmq_cluster=\"$rabbitmq_cluster\"}", - "legendFormat":"Consumers ({{`{{job}}`}} | {{`{{instance}}`}})", - "range":true, - "refId":"B" - } - ], - "title":"Queue messages and consumers", - "type":"timeseries" - } - ], - "refresh":"10s", - "revision":1, - "schemaVersion":38, - "style":"dark", - "tags":[ - "rabbitmq-prometheus" - ], - "templating":{ - "list":[ - { - "current":{ - "selected":false, - "text":"default", - "value":"default" - }, - "hide":2, - "includeAll":false, - "label":"datasource", - "multi":false, - "name":"DS_PROMETHEUS", - "options":[ - - ], - "query":"prometheus", - "refresh":1, - "regex":"", - "skipUrlSync":false, - "type":"datasource", - "datasource":"${DS_PROMETHEUS}" - }, - { - "current":{ - - }, - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "definition":"label_values(rabbitmq_identity_info, namespace)", - "hide":0, - "includeAll":false, - "label":"Namespace", - "multi":false, - "name":"namespace", - "options":[ - - ], - "query":{ - "query":"label_values(rabbitmq_identity_info, namespace)", - "refId":"StandardVariableQuery" - }, - "refresh":2, - "regex":"", - "skipUrlSync":false, - "sort":1, - "tagValuesQuery":"", - "tagsQuery":"", - "type":"query", - "useTags":false - }, - { - "current":{ - - }, - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "definition":"label_values(rabbitmq_identity_info{namespace=\"$namespace\"}, rabbitmq_cluster)", - "hide":0, - "includeAll":false, - "label":"RabbitMQ Cluster", - "multi":false, - "name":"rabbitmq_cluster", - "options":[ - - ], - "query":{ - "query":"label_values(rabbitmq_identity_info{namespace=\"$namespace\"}, rabbitmq_cluster)", - "refId":"StandardVariableQuery" - }, - "refresh":2, - "regex":"", - "skipUrlSync":false, - "sort":1, - "tagValuesQuery":"", - "tagsQuery":"", - "type":"query", - "useTags":false - }, - { - "current":{ - - }, - "datasource":{ - "type":"prometheus", - "uid":"${DS_PROMETHEUS}" - }, - "definition":"query_result(rabbitmq_detailed_queue_messages{namespace=\"$namespace\"} * on (instance, job) group_left(rabbitmq_cluster) rabbitmq_identity_info{namespace=\"$namespace\"})", - "hide":0, - "includeAll":false, - "label":"Queue", - "multi":false, - "name":"queue", - "options":[ - - ], - "query":{ - "query":"query_result(rabbitmq_detailed_queue_messages{namespace=\"$namespace\"} * on (instance, job) group_left(rabbitmq_cluster) rabbitmq_identity_info{namespace=\"$namespace\", rabbitmq_cluster=\"$rabbitmq_cluster\"})", - "refId":"StandardVariableQuery" - }, - "refresh":2, - "regex":"/.*queue=\"([^\"]+)\".*/", - "skipUrlSync":false, - "sort":0, - "tagValuesQuery":"", - "tagsQuery":"", - "type":"query", - "useTags":false - } - ] - }, - "time":{ - "from":"now-15m", - "to":"now" - }, - "timepicker":{ - - }, - "timezone":"", - "title":"RabbitMQ-Queue", - "uid":"j9t8vwH7k", - "version":3, - "weekStart":"" - } -{{- end }} diff --git a/attic/templates/resources/dashboards/velero.yaml b/attic/templates/resources/dashboards/velero.yaml deleted file mode 100644 index 6874bdec..00000000 --- a/attic/templates/resources/dashboards/velero.yaml +++ /dev/null @@ -1,2214 +0,0 @@ -{{- if .Values.velero.enabled }} -apiVersion: v1 -data: - velero.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Velero Stats maintained by Velero team", - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": 16829, - "graphTooltip": 1, - "id": 34, - "iteration": 1678979743251, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 15, - "panels": [], - "title": "Backup", - "type": "row" - }, - { - "datasource": "prometheus", - "description": "The sum of one-off backup and schedule backup success total ", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a", - "value": null - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 0, - "y": 1 - }, - "id": 23, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "velero_backup_total", - "format": "time_series", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Backup Success Total", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a", - "value": null - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 4, - "y": 1 - }, - "id": 22, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(velero_backup_success_total{schedule=~\"$schedule\"}) / sum(velero_backup_attempt_total{schedule=~\"$schedule\"})", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Backup Success Rate", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a", - "value": null - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 8, - "y": 1 - }, - "id": 26, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(velero_backup_deletion_success_total{schedule=~\"$schedule\"}) / sum(velero_backup_deletion_attempt_total{schedule=~\"$schedule\"})", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Backup Deletion Success Rate", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a", - "value": null - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 12, - "y": 1 - }, - "id": 25, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(velero_volume_snapshot_success_total{schedule=~\"$schedule\"}) / sum(velero_volume_snapshot_attempt_total{schedule=~\"$schedule\"})\n", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Volume snapshot Success Rate", - "type": "gauge" - }, - { - "columns": [ - { - "$$hashKey": "object:462", - "text": "Current", - "value": "current" - } - ], - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "description": "for schedule backup use only", - "fontSize": "100%", - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 13, - "scroll": true, - "showHeader": true, - "sort": { - "col": 0, - "desc": false - }, - "styles": [ - { - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "pattern": "Time", - "type": "date" - }, - { - "alias": "Hours since last backup", - "align": "auto", - "colorMode": "row", - "colors": [ - "rgba(50, 172, 45, 0.97)", - "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" - ], - "decimals": 2, - "pattern": "Current", - "thresholds": [ - "24", - "48" - ], - "type": "number", - "unit": "short" - } - ], - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "(time() - velero_backup_last_successful_timestamp{schedule!=\"\"}) / 60 / 60", - "instant": true, - "interval": "", - "legendFormat": "{{`{{schedule}}`}}", - "refId": "A" - } - ], - "title": "Hours since last Backup", - "transform": "timeseries_aggregations", - "type": "table-old" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "decimals": 0, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 10, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 24, - "x": 0, - "y": 10 - }, - "hiddenSeries": false, - "id": 8, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_success_total{schedule=~\"$schedule\"}[1h])))", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "Backup success", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_failure_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup failure", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_partial_failure_total{schedule=~\"$schedule\"}[1h])))", - "instant": false, - "interval": "", - "legendFormat": "Backup partial failure", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_deletion_success_total{schedule=~\"$schedule\"}[1h])))", - "instant": false, - "interval": "", - "legendFormat": "Backup deletion success", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_deletion_failure_total{schedule=~\"$schedule\"}[1h])))", - "instant": false, - "interval": "", - "legendFormat": "Backup deletion failure", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "sum(avg_over_time(velero_backup_items_total{schedule=~\"$schedule\"}[1h]))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup items total", - "refId": "F" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "sum(avg_over_time(velero_backup_items_errors{schedule=~\"$schedule\"}[1h]))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup items errors_total", - "refId": "G" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_backup_validation_failure_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup validation failure", - "refId": "H" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_volume_snapshot_success_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup volume snapshot success", - "refId": "I" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_volume_snapshot_failure_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Backup volume snapshot failure", - "refId": "J" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Backup per hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:124", - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:125", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "cards": {}, - "color": { - "cardColor": "#1F60C4", - "colorScale": "linear", - "colorScheme": "interpolateSpectral", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "tsbuckets", - "datasource": "prometheus", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 19 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 34, - "legend": { - "show": true - }, - "reverseYBuckets": false, - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(increase(velero_backup_duration_seconds_bucket{schedule=~\"$schedule\",le!=\"+Inf\"}[1h])) by (le)", - "format": "heatmap", - "hide": false, - "interval": "", - "legendFormat": "{{`{{le}}`}}", - "refId": "B" - } - ], - "title": "Backup time heatmap", - "tooltip": { - "show": true, - "showHistogram": true - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "format": "s", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 27 - }, - "hiddenSeries": false, - "id": 18, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(avg_over_time(velero_backup_tarball_size_bytes{schedule=~\"$schedule\"}[15m]))", - "interval": "", - "legendFormat": "{{`{{schedule}}`}}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Backup Size", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:561", - "decimals": 0, - "format": "decbytes", - "label": "", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:562", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 33 - }, - "id": 17, - "panels": [], - "title": "Restore", - "type": "row" - }, - { - "datasource": "prometheus", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a" - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 0, - "y": 34 - }, - "id": 27, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "velero_restore_total", - "format": "time_series", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Restore Success Total", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a" - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 4, - "y": 34 - }, - "id": 24, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(velero_restore_success_total{schedule=~\"$schedule\"}) / sum(velero_restore_attempt_total{schedule=~\"$schedule\"})", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Restore Success Rate", - "type": "gauge" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "decimals": 0, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 10, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 16, - "x": 8, - "y": 34 - }, - "hiddenSeries": false, - "id": 28, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_restore_success_total{schedule=~\"$schedule\"}[1h])))", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "Restore success", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_restore_failed_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "interval": "", - "legendFormat": "Restore failure", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_restore_validation_failed_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "interval": "", - "legendFormat": "Restore validation failure", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_restore_partial_failure_total{schedule=~\"$schedule\"}[1h])))", - "hide": false, - "interval": "", - "legendFormat": "Restore partial failure", - "refId": "D" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Restore per hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:124", - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:125", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 43 - }, - "id": 30, - "panels": [], - "title": "CSI", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "decimals": 0, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 10, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 24, - "x": 0, - "y": 44 - }, - "hiddenSeries": false, - "id": 32, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_csi_snapshot_attempt_total{schedule=~\"$schedule\", backupName=~\"$csi_backup_name\"}[1h])))", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "CSI Snapshot attempt", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_csi_snapshot_success_total{schedule=~\"$schedule\", backupName=~\"$csi_backup_name\"}[1h])))", - "hide": false, - "interval": "", - "legendFormat": "CSI Snapshot success", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(velero_csi_snapshot_failure_total{schedule=~\"$schedule\", backupName=~\"$csi_backup_name\"}[1h])))", - "hide": false, - "interval": "", - "legendFormat": "CSI Snapshot failure", - "refId": "C" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "CSI per hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:124", - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:125", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": true, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 53 - }, - "id": 36, - "panels": [], - "title": "Restic", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a" - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 0, - "y": 54 - }, - "id": 37, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(restic_pod_volume_backup_dequeue_count{node=~\"$restic_node\"}) / sum(restic_pod_volume_backup_enqueue_count{node=~\"$restic_node\"})", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Restic Success Rate", - "type": "gauge" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "decimals": 0, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 10, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 20, - "x": 4, - "y": 54 - }, - "hiddenSeries": false, - "id": 38, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(restic_pod_volume_backup_enqueue_count{node=~\"$restic_node\"}[1h])))", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "Restic enqueue", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "round(sum(increase(restic_pod_volume_backup_dequeue_count{node=~\"$restic_node\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Restic dequeue", - "refId": "B" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Restic per hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:124", - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:125", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 63 - }, - "hiddenSeries": false, - "id": 39, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(avg_over_time(restic_restic_operation_latency_seconds_gauge{backupName=~\"$restic_backup_name\", node=~\"$restic_node\", operation=~\"$restic_operation\", pod_volume_backup=~\"$restic_pvb_name\"}[15m]))", - "interval": "", - "legendFormat": "Avg over time", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Restic time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:561", - "decimals": 0, - "format": "s", - "label": "", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:562", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 69 - }, - "id": 43, - "panels": [], - "title": "File System Backup(for v1.10 and later)", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#d44a3a" - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 0.95 - }, - { - "color": "#299c46", - "value": 0.99 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 0, - "y": 70 - }, - "id": 41, - "links": [], - "maxDataPoints": 100, - "options": { - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(pod_volume_backup_dequeue_count{node=~\"$fsb_node\"}) / sum(pod_volume_backup_enqueue_count{node=~\"$fsb_node\"})", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "FSB Success Rate", - "type": "gauge" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "decimals": 0, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 10, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 20, - "x": 4, - "y": 70 - }, - "hiddenSeries": false, - "id": 45, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": true, - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "round(sum(increase(pod_volume_backup_enqueue_count{node=~\"$fsb_node\"}[1h])))", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "FSB enqueue", - "refId": "A" - }, - { - "datasource": "prometheus", - "exemplar": false, - "expr": "round(sum(increase(pod_volume_backup_dequeue_count{node=~\"$fsb_node\"}[1h])))", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "FSB dequeue", - "refId": "B" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "FSB per hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:124", - "decimals": 0, - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:125", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 79 - }, - "hiddenSeries": false, - "id": 47, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": "prometheus", - "exemplar": false, - "expr": "sum(avg_over_time(pod_volume_operation_latency_seconds_gauge{backupName=~\"$fsb_backup_name\", node=~\"$fsb_node\", operation=~\"$fsb_operation\", pod_volume_backup=~\"$fsb_pvb_name\"}[15m]))", - "interval": "", - "legendFormat": "Avg over time", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "FSB time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:561", - "decimals": 0, - "format": "s", - "label": "", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:562", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - } - ], - "refresh": false, - "schemaVersion": 36, - "style": "dark", - "tags": [ - "velero" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "k0", - "value": "k0" - }, - "hide": 0, - "includeAll": false, - "label": "Datasource", - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "$datasource" - }, - "definition": "label_values(velero_backup_attempt_total, schedule)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "schedule", - "options": [], - "query": { - "query": "label_values(velero_backup_attempt_total, schedule)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(velero_csi_snapshot_attempt_total, backupName)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "csi_backup_name", - "options": [], - "query": { - "query": "label_values(velero_csi_snapshot_attempt_total, backupName)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(restic_pod_volume_backup_enqueue_count, node)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "restic_node", - "options": [], - "query": { - "query": "label_values(restic_pod_volume_backup_enqueue_count, node)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(restic_restic_operation_latency_seconds_gauge, backupName)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "restic_backup_name", - "options": [], - "query": { - "query": "label_values(restic_restic_operation_latency_seconds_gauge, backupName)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(restic_restic_operation_latency_seconds_gauge, operation)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "restic_operation", - "options": [], - "query": { - "query": "label_values(restic_restic_operation_latency_seconds_gauge, operation)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(restic_restic_operation_latency_seconds_gauge, pod_volume_backup)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "restic_pvb_name", - "options": [], - "query": { - "query": "label_values(restic_restic_operation_latency_seconds_gauge, pod_volume_backup)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(pod_volume_backup_enqueue_count, node)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "fsb_node", - "options": [], - "query": { - "query": "label_values(pod_volume_backup_enqueue_count, node)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(pod_volume_operation_latency_seconds_gauge, backupName)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "fsb_backup_name", - "options": [], - "query": { - "query": "label_values(pod_volume_operation_latency_seconds_gauge, backupName)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(pod_volume_operation_latency_seconds_gauge, operation)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "fsb_operation", - "options": [], - "query": { - "query": "label_values(pod_volume_operation_latency_seconds_gauge, operation)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "definition": "label_values(pod_volume_operation_latency_seconds_gauge, pod_volume_backup)", - "hide": 0, - "includeAll": true, - "multi": false, - "name": "fsb_pvb_name", - "options": [], - "query": { - "query": "label_values(pod_volume_operation_latency_seconds_gauge, pod_volume_backup)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - } - ] - }, - "time": { - "from": "now-2d", - "to": "now" - }, - "timepicker": { - "hidden": false, - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Kubernetes/Tanzu/Velero", - "uid": "EbXSjT24k", - "version": 2, - "weekStart": "" - } -kind: ConfigMap -metadata: - name: velero-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" -{{- end }} diff --git a/attic/templates/resources/dashboards/x509-exporter-dashbaoard.yaml b/attic/templates/resources/dashboards/x509-exporter-dashbaoard.yaml deleted file mode 100644 index 01a9bc0a..00000000 --- a/attic/templates/resources/dashboards/x509-exporter-dashbaoard.yaml +++ /dev/null @@ -1,2011 +0,0 @@ -{{- if .Values.x509_exporter.enabled }} -apiVersion: v1 -data: - x509-dash.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Unified dashboard for checking certificates expiration: Kubernetes Secrets, certificate files on nodes, or on any server.", - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": 13922, - "graphTooltip": 0, - "iteration": 1678705600458, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 24, - "panels": [], - "title": "Overview", - "type": "row" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "super-light-blue" - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 5, - "x": 0, - "y": 1 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "count(x509_cert_not_after)", - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Total Certificates", - "type": "stat" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "dark-red", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 3, - "x": 5, - "y": 1 - }, - "id": 18, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "sum(((x509_cert_not_after - time()) / 86400) < bool 0)", - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Expired", - "type": "stat" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 3, - "x": 8, - "y": 1 - }, - "id": 19, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "sum(0 < ((x509_cert_not_after - time()) / 86400) < bool $critical_threshold)", - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Expiring within $critical_threshold days", - "type": "stat" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "yellow", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 3, - "x": 11, - "y": 1 - }, - "id": 20, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "sum(0 < ((x509_cert_not_after - time()) / 86400) < bool $warning_threshold)", - "instant": false, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Expiring within $warning_threshold days", - "type": "stat" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "super-light-blue" - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 14, - "y": 1 - }, - "id": 17, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "count(x509_read_errors)", - "instant": false, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Exporters", - "type": "stat" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 14, - "y": 4 - }, - "id": 36, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "sum(x509_read_errors)", - "instant": false, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Exporter Errors", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 26, - "panels": [], - "title": "Expiration", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "description": "Because of a missing feature in Grafana, critical and warning thresholds from dashboard variables will not affect coloration of the Time Left column in this table.\n\nThresholds are to be set manually in the Overrides settings for this widget.\n\nPlease vote or contribute to issue : https://github.com/grafana/grafana/issues/922", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": true, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red" - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Time Left" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 200 - }, - { - "id": "custom.filterable", - "value": false - }, - { - "id": "custom.displayMode", - "value": "color-background" - }, - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { - "color": "dark-red" - }, - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 7 - }, - { - "color": "green", - "value": 28 - } - ] - } - }, - { - "id": "unit", - "value": "d" - } - ] - } - ] - }, - "gridPos": { - "h": 13, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 46, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "sort(((x509_cert_not_after{secret_name!=\"linkerd-identity-issuer\", issuer_O=\"\", issuer_CN!=\"webhook.linkerd.cluster.local\"} - time()) / 86400) < $list_threshold)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Kubernetes Secrets (no issuer) (time left < $list_threshold days)", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(subject_CN|secret_namespace|secret_name|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": { - "Value": 3, - "secret_name": 2, - "secret_namespace": 1, - "subject_CN": 0 - }, - "renameByName": { - "Value": "Time Left", - "secret_name": "Secret Name", - "secret_namespace": "Secret Namespace", - "subject_CN": "Subject CN" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "description": "Because of a missing feature in Grafana, critical and warning thresholds from dashboard variables will not affect coloration of the Time Left column in this table.\n\nThresholds are to be set manually in the Overrides settings for this widget.\n\nPlease vote or contribute to issue : https://github.com/grafana/grafana/issues/922", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "displayMode": "auto", - "filterable": true, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Time Left" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 200 - }, - { - "id": "custom.filterable", - "value": false - }, - { - "id": "custom.displayMode", - "value": "color-background" - }, - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { - "color": "dark-red", - "value": null - }, - { - "color": "red", - "value": 0 - }, - { - "color": "#EAB839", - "value": 7 - }, - { - "color": "green", - "value": 28 - } - ] - } - }, - { - "id": "unit", - "value": "d" - } - ] - } - ] - }, - "gridPos": { - "h": 13, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 47, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "exemplar": false, - "expr": "sort(((x509_cert_not_after{issuer_O!=\"\"} - time()) / 86400) < $list_threshold)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Kubernetes Secrets (with issuer) (time left < $list_threshold days)", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(subject_CN|secret_namespace|secret_name|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": { - "Value": 3, - "secret_name": 2, - "secret_namespace": 1, - "subject_CN": 0 - }, - "renameByName": { - "Value": "Time Left", - "filepath": "File Path", - "instance": "Instance", - "subject_CN": "Subject CN" - } - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 21 - }, - "id": 12, - "panels": [], - "title": "Charts", - "type": "row" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Certificate Count" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 150 - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 8, - "x": 0, - "y": 22 - }, - "id": 14, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "topk(10, sort_desc(count by (issuer_CN) (x509_cert_not_after)))", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Top Issuers", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "names": [ - "issuer_CN", - "Value" - ] - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "Value": "Certificate Count", - "issuer_CN": "Issuer CN" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Certificate Count" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 150 - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 8, - "x": 8, - "y": 22 - }, - "id": 15, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "topk(10, sort_desc(count by (secret_namespace) (x509_cert_not_after{secret_namespace!=\"\"})))", - "format": "table", - "instant": true, - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Top Namespaces (Kubernetes Secrets)", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "names": [ - "Value", - "secret_namespace" - ] - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "Value": "Certificate Count", - "secret_namespace": "Namespace" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Days" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 100 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Secret Namespace" - }, - "properties": [ - { - "id": "custom.width", - "value": 258 - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 12, - "x": 0, - "y": 34 - }, - "id": 31, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "bottomk(10, (x509_cert_not_after{secret_name!=\"\"} - x509_cert_not_before) / 86400)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Kubernetes Secrets : Shortest Validity Period", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(subject_CN|secret_namespace|secret_name|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": { - "Value": 3, - "secret_name": 2, - "secret_namespace": 1, - "subject_CN": 0 - }, - "renameByName": { - "Value": "Days", - "secret_name": "Secret Name", - "secret_namespace": "Secret Namespace", - "subject_CN": "Subject CN" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Days" - }, - "properties": [ - { - "id": "custom.align", - "value": "center" - }, - { - "id": "custom.width", - "value": 100 - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 12, - "x": 12, - "y": 34 - }, - "id": 28, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "topk(10, (x509_cert_not_after{secret_name!=\"\"} - x509_cert_not_before) / 86400)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Kubernetes Secrets : Longest Validity Period", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(subject_CN|secret_namespace|secret_name|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": { - "Value": 3, - "secret_name": 2, - "secret_namespace": 1, - "subject_CN": 0 - }, - "renameByName": { - "Value": "Days", - "secret_name": "Secret Name", - "secret_namespace": "Secret Namespace", - "subject_CN": "Subject CN" - } - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 46 - }, - "id": 35, - "panels": [], - "title": "Exporters", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 47 - }, - "hiddenSeries": false, - "id": 38, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "count(x509_read_errors)", - "interval": "", - "legendFormat": "exporters", - "queryType": "randomWalk", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Reporting Exporters", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:237", - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:238", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": { - "exporters with errors": "red" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 47 - }, - "hiddenSeries": false, - "id": 39, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum (x509_read_errors > bool 0)", - "interval": "", - "legendFormat": "exporters with errors", - "queryType": "randomWalk", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Exporters with Errors", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:237", - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:238", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": { - "error rate": "red", - "errors": "red" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 55 - }, - "hiddenSeries": false, - "id": 41, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(rate(x509_read_errors[15m]))", - "interval": "", - "legendFormat": "error rate", - "queryType": "randomWalk", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:237", - "format": "cps", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:238", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": { - "errors": "red" - }, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 55 - }, - "hiddenSeries": false, - "id": 40, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.5.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(x509_read_errors)", - "interval": "", - "legendFormat": "errors", - "queryType": "randomWalk", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Cumulative Errors", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:237", - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:238", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Rate" - }, - "properties": [ - { - "id": "custom.width", - "value": 150 - }, - { - "id": "custom.align", - "value": "center" - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 12, - "x": 0, - "y": 63 - }, - "id": 43, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "topk(10, rate(x509_read_errors[6h]))", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Top Exporters by Error Rate", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(instance|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "Value": "Rate", - "instance": "Instance" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "displayMode": "auto", - "filterable": false, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Errors" - }, - "properties": [ - { - "id": "custom.width", - "value": 150 - }, - { - "id": "custom.align", - "value": "center" - } - ] - } - ] - }, - "gridPos": { - "h": 12, - "w": 12, - "x": 12, - "y": 63 - }, - "id": 44, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "8.5.3", - "targets": [ - { - "expr": "topk(10, x509_read_errors)", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "queryType": "randomWalk", - "refId": "A" - } - ], - "title": "Top Exporters by Cumulative Errors", - "transformations": [ - { - "id": "filterFieldsByName", - "options": { - "include": { - "pattern": "^(instance|Value)$" - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "Value": "Errors", - "instance": "Instance" - } - } - } - ], - "type": "table" - } - ], - "refresh": "", - "schemaVersion": 36, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "label": "Datasource", - "multi": false, - "name": "DS_PROMETHEUS", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "selected": false, - "text": "7", - "value": "7" - }, - "hide": 0, - "includeAll": false, - "label": "Critical Threshold (days)", - "multi": false, - "name": "critical_threshold", - "options": [ - { - "selected": false, - "text": "1", - "value": "1" - }, - { - "selected": true, - "text": "7", - "value": "7" - }, - { - "selected": false, - "text": "14", - "value": "14" - }, - { - "selected": false, - "text": "15", - "value": "15" - }, - { - "selected": false, - "text": "28", - "value": "28" - }, - { - "selected": false, - "text": "30", - "value": "30" - }, - { - "selected": false, - "text": "60", - "value": "60" - }, - { - "selected": false, - "text": "90", - "value": "90" - }, - { - "selected": false, - "text": "180", - "value": "180" - }, - { - "selected": false, - "text": "365", - "value": "365" - } - ], - "query": "1,7,14,15,28,30,60,90,180,365", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": false, - "text": "28", - "value": "28" - }, - "hide": 0, - "includeAll": false, - "label": "Warning Threshold (days)", - "multi": false, - "name": "warning_threshold", - "options": [ - { - "selected": false, - "text": "1", - "value": "1" - }, - { - "selected": false, - "text": "7", - "value": "7" - }, - { - "selected": false, - "text": "14", - "value": "14" - }, - { - "selected": false, - "text": "15", - "value": "15" - }, - { - "selected": true, - "text": "28", - "value": "28" - }, - { - "selected": false, - "text": "30", - "value": "30" - }, - { - "selected": false, - "text": "60", - "value": "60" - }, - { - "selected": false, - "text": "90", - "value": "90" - }, - { - "selected": false, - "text": "180", - "value": "180" - }, - { - "selected": false, - "text": "365", - "value": "365" - } - ], - "query": "1,7,14,15,28,30,60,90,180,365", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "current": { - "selected": true, - "text": "7300", - "value": "7300" - }, - "hide": 0, - "includeAll": false, - "label": "List expiring in less than (days)", - "multi": false, - "name": "list_threshold", - "options": [ - { - "selected": false, - "text": "1", - "value": "1" - }, - { - "selected": false, - "text": "7", - "value": "7" - }, - { - "selected": false, - "text": "15", - "value": "15" - }, - { - "selected": false, - "text": "30", - "value": "30" - }, - { - "selected": false, - "text": "60", - "value": "60" - }, - { - "selected": false, - "text": "90", - "value": "90" - }, - { - "selected": false, - "text": "180", - "value": "180" - }, - { - "selected": false, - "text": "365", - "value": "365" - }, - { - "selected": false, - "text": "730", - "value": "730" - }, - { - "selected": false, - "text": "1095", - "value": "1095" - }, - { - "selected": false, - "text": "1460", - "value": "1460" - }, - { - "selected": false, - "text": "1825", - "value": "1825" - }, - { - "selected": false, - "text": "3650", - "value": "3650" - }, - { - "selected": true, - "text": "7300", - "value": "7300" - } - ], - "query": "1,7,15,30,60,90,180,365,730,1095,1460,1825,3650,7300", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Certificates Expiration (X509 Certificate Exporter)", - "uid": "lHnsYlPGk", - "version": 2, - "weekStart": "" - } -kind: ConfigMap -metadata: - creationTimestamp: null - name: x509-exporter-dashboard - namespace: prometheus - labels: - grafana_dashboard: "1" -{{- end }} diff --git a/attic/templates/resources/external-clusterrole.yaml b/attic/templates/resources/external-clusterrole.yaml deleted file mode 100644 index 25ec7c68..00000000 --- a/attic/templates/resources/external-clusterrole.yaml +++ /dev/null @@ -1,209 +0,0 @@ -{{- if .Values.cluster_config.external_kubectl_access.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-access -rules: -- apiGroups: - - "" - resources: - - pods - - serviceaccounts - - namespaces - - events - - persistentvolumeclaims - - persistentvolumes - - bindings - - componentstatuses - - podtemplates - - replicationcontrollers - - resourcequotas - - services - - nodes - - limitranges - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - namespaces - verbs: - - create - - delete -- apiGroups: - - apiregistration.k8s.io - resources: - - apiservices - verbs: - - get - - list - - watch -- apiGroups: - - apps - resources: - - controllerrevisions - - statefulsets - - replicasets - - daemonsets - - deployments - verbs: - - get - - list - - watch -- apiGroups: - - events.k8s.io - resources: - - events - verbs: - - get - - list - - watch -- apiGroups: - - autoscaling - resources: - - horizontalpodautoscalers - verbs: - - get - - list - - watch -- apiGroups: - - batch - resources: - - jobs - - cronjobs - verbs: - - get - - list - - watch -- apiGroups: - - certificates.k8s.io - resources: - - certificatesigningrequests - verbs: - - get - - list - - watch -- apiGroups: - - networking.k8s.io - resources: - - ingressclasses - - networkpolicies - - ingresses - verbs: - - get - - list - - watch -- apiGroups: - - policy - resources: - - poddisruptionbudgets - verbs: - - get - - list - - watch -- apiGroups: - - rbac.authorization.k8s.io - resources: - - roles - - clusterroles - - clusterrolebindings - - rolebindings - verbs: - - get - - list - - watch -- apiGroups: - - storage.k8s.io - resources: - - csinodes - - storageclasses - - csistoragecapacities - - volumeattachments - - csidrivers - verbs: - - get - - list - - watch -- apiGroups: - - admissionregistration.k8s.io - resources: - - mutatingwebhookconfigurations - - validatingwebhookconfigurations - verbs: - - get - - list - - watch -- apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - get - - list - - watch -- apiGroups: - - scheduling.k8s.io - resources: - - priorityclasses - verbs: - - get - - list - - watch -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch -- apiGroups: - - node.k8s.io - resources: - - runtimeclasses - verbs: - - get - - list - - watch -- apiGroups: - - flowcontrol.apiserver.k8s.io - resources: - - flowschemas - - prioritylevelconfigurations - verbs: - - get - - list - - watch -- apiGroups: - - talos.dev - resources: - - serviceaccounts - verbs: - - get - - list - - watch -- apiGroups: - - cilium.io - resources: - - ciliumexternalworkloads - - ciliumnetworkpolicies - - ciliumidentities - - ciliumnodes - - ciliumendpoints - - ciliumclusterwidenetworkpolicies - verbs: - - get - - list - - watch -- apiGroups: - - metrics.k8s.io - resources: - - pods - - nodes - verbs: - - get - - list - - watch -{{- end }} diff --git a/attic/templates/resources/external-clusterrolebinding.yaml b/attic/templates/resources/external-clusterrolebinding.yaml deleted file mode 100644 index 4965792b..00000000 --- a/attic/templates/resources/external-clusterrolebinding.yaml +++ /dev/null @@ -1,14 +0,0 @@ -{{- if .Values.cluster_config.external_kubectl_access.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-access -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-access -subjects: -- apiGroup: rbac.authorization.k8s.io - kind: Group - name: {{ .Values.cluster_config.external_kubectl_access.admin_group }} -{{- end }} diff --git a/attic/templates/resources/kube-flannel-rbac.yaml b/attic/templates/resources/kube-flannel-rbac.yaml deleted file mode 100644 index b14b53a8..00000000 --- a/attic/templates/resources/kube-flannel-rbac.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# Create the clusterrole and clusterrolebinding: -# $ kubectl create -f kube-flannel-rbac.yml -# Create the pod using the same namespace used by the flannel serviceaccount: -# $ kubectl create --namespace kube-system -f kube-flannel-legacy.yml ---- -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: flannel-client -rules: - - apiGroups: - - "" - resources: - - pods - verbs: - - get - - apiGroups: - - "" - resources: - - nodes - verbs: - - list - - watch - - apiGroups: - - "" - resources: - - nodes/status - verbs: - - patch ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: flannel-client -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: flannel-client -subjects: - - kind: User - name: flannel-client - apiGroup: rbac.authorization.k8s.io diff --git a/attic/templates/resources/kube-proxy-rbac.yaml b/attic/templates/resources/kube-proxy-rbac.yaml deleted file mode 100644 index a695d238..00000000 --- a/attic/templates/resources/kube-proxy-rbac.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace. -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: kube-proxy -subjects: - - kind: User - name: kube-proxy - apiGroup: rbac.authorization.k8s.io - - kind: ServiceAccount - name: kube-proxy - namespace: kube-system -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: kube-proxy ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: kube-proxy -rules: - - apiGroups: - - "" - resources: - - endpoints - - events - - services - - nodes - verbs: ["get", "watch", "list"] - - nonResourceURLs: ["*"] - verbs: ["get", "watch", "list"] - - - apiGroups: - - "" - - "events.k8s.io" - resources: - - events - verbs: ["*"] - - - nonResourceURLs: ["*"] - verbs: ["*"] - - apiGroups: - - discovery.k8s.io - resources: - - endpointslices - verbs: - - list - - watch - - diff --git a/attic/templates/resources/kyverno-cluster-admin.yaml b/attic/templates/resources/kyverno-cluster-admin.yaml deleted file mode 100644 index 5154ee58..00000000 --- a/attic/templates/resources/kyverno-cluster-admin.yaml +++ /dev/null @@ -1,17 +0,0 @@ -{{- if .Values.kyverno.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: kyverno:generate-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: -- kind: ServiceAccount - name: kyverno - namespace: kyverno -- kind: ServiceAccount - name: kyverno-background-controller - namespace: kyverno -{{- end }} diff --git a/attic/templates/resources/kyverno-generate-cilium-network-policies.yaml b/attic/templates/resources/kyverno-generate-cilium-network-policies.yaml deleted file mode 100644 index dc956ce9..00000000 --- a/attic/templates/resources/kyverno-generate-cilium-network-policies.yaml +++ /dev/null @@ -1,29 +0,0 @@ -{{- if and (.Values.kyverno.enabled) (.Values.cilium.enabled) }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: kyverno:generate-cilium-networkpolicies -rules: -- apiGroups: - - cilium.io - resources: - - ciliumnetworkpolicies - verbs: - - "*" ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: kyverno:generate-cilium-network-policies -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: kyverno:generate-cilium-networkpolicies -subjects: -- kind: ServiceAccount - name: kyverno - namespace: kyverno -- kind: ServiceAccount - name: kyverno-background-controller - namespace: kyverno -{{- end }} diff --git a/attic/templates/resources/label-and-taint-nodes.yaml b/attic/templates/resources/label-and-taint-nodes.yaml deleted file mode 100644 index fb707755..00000000 --- a/attic/templates/resources/label-and-taint-nodes.yaml +++ /dev/null @@ -1,96 +0,0 @@ -{{ if .Values.cluster_config.nodes }} - ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: label-and-taint-nodes - namespace: kube-system -spec: - backoffLimit: 1 - template: - metadata: - annotations: - linkerd.io/inject: disable - spec: - restartPolicy: Never - serviceAccountName: label-and-taint-nodes - securityContext: - runAsUser: 12000 - runAsGroup: 13000 - fsGroup: 10000 - affinity: - tolerations: - - key: unschedulable - value: "true" - effect: NoSchedule - containers: - - image: bitnami/kubectl:1.24 - name: kubectl - resources: {} - securityContext: - allowPrivilegeEscalation: false - command: - - "/bin/sh" - - -c - - /tmp/scripts/script.sh - volumeMounts: - - name: scripts - mountPath: /tmp/scripts - volumes: - - name: scripts - configMap: - name: label-and-taint-scripts - defaultMode: 0755 ---- -apiVersion: v1 -data: - script.sh: | - #! /bin/bash -{{- range $node := .Values.cluster_config.nodes }} - {{- range .labels }} - kubectl label nodes --overwrite=true {{ $node.name }} {{ . | quote }} - {{- end }} - {{- range .taints }} - kubectl taint nodes --overwrite=true {{ $node.name }} {{ . | quote }} - {{- end }} -{{- end }} -kind: ConfigMap -metadata: - name: label-and-taint-scripts - namespace: kube-system ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: label-and-taint-nodes - namespace: kube-system ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: label-and-taint-nodes -rules: -- apiGroups: - - "" - resources: - - nodes - verbs: - - get - - list - - update - - patch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: label-and-taint-nodes -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: label-and-taint-nodes -subjects: -- kind: ServiceAccount - name: label-and-taint-nodes - namespace: kube-system -{{ end }} diff --git a/attic/templates/resources/operator-role.yaml b/attic/templates/resources/operator-role.yaml deleted file mode 100644 index 2e630e77..00000000 --- a/attic/templates/resources/operator-role.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: az-kubernetes-operators-cluster-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: -- apiGroup: rbac.authorization.k8s.io - kind: Group - name: dd2aa2d6-269d-48fe-90cc-04fd5c08bd29 diff --git a/attic/templates/resources/pre-cert-manager.yaml b/attic/templates/resources/pre-cert-manager.yaml deleted file mode 100644 index e7b7dae8..00000000 --- a/attic/templates/resources/pre-cert-manager.yaml +++ /dev/null @@ -1,225 +0,0 @@ ---- -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - name: letsencrypt-production -spec: - acme: - # The ACME server URL - server: https://acme-v02.api.letsencrypt.org/directory - # Email address used for ACME registration - email: {{ .Values.clusterConfig.acme_email }} - # Name of a secret used to store the ACME account private key - privateKeySecretRef: - name: letsencrypt-production - solvers: - - http01: - ingress: - class: nginx ---- -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - name: letsencrypt-staging -spec: - acme: - # The ACME server URL - server: https://acme-staging-v02.api.letsencrypt.org/directory - # Email address used for ACME registration - email: {{ .Values.clusterConfig.acme_email }} - # Name of a secret used to store the ACME account private key - privateKeySecretRef: - name: letsencrypt-staging - solvers: - - http01: - ingress: - class: nginx ---- -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - name: ca-issuer -spec: - ca: - secretName: cluster-ca ---- -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - name: selfsigning-issuer -spec: - selfSigned: {} ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: front-proxy-client -subjects: - - kind: User - name: front-proxy-client - apiGroup: rbac.authorization.k8s.io -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: front-proxy-client ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: front-proxy-client -rules: -- apiGroups: - - "webhook.cert-manager.io" - resources: - - mutations - - validations - verbs: [ "*" ] -- apiGroups: - - metrics.k8s.io - resources: - - pods - - nodes - verbs: - - get - - list - - watch ---- - -{{ if .Values.clusterConfig.initca }} - -# Pod to update certificates from master nodes -# only runs on control plane nodes (etcd) -# Mounts cert files rotatet by nixos service.mgr and uses it to update cert-manager secret -# Always create certs on initial creation, -# Otherwise, cert creation would not happen until cronJob runs -apiVersion: batch/v1 -kind: Job -metadata: - name: cert-create - namespace: cert-manager -spec: - backoffLimit: 1 - template: - metadata: - labels: - block-egress: "true" - annotations: - linkerd.io/inject: disabled - spec: - restartPolicy: Never - serviceAccountName: cert-secret-updater - securityContext: - runAsUser: 12000 - runAsGroup: 13000 - fsGroup: 10000 - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: node-role.kubernetes.io - operator: In - values: - - control-plane - tolerations: - - key: unschedulable - value: "true" - effect: NoSchedule - containers: - - image: bitnami/kubectl:1.24 - name: kubectl - resources: {} - securityContext: - allowPrivilegeEscalation: false - command: - - "/bin/sh" - - -c - - /tmp/renew-certs/renew-certs.sh - volumeMounts: - - name: ca-pem - mountPath: /tmp/ca.pem - - name: ca-key-pem - mountPath: /tmp/ca-key.pem - - name: certs-script - mountPath: /tmp/renew-certs - volumes: - - name: ca-pem - hostPath: - path: {{.Values.clusterConfig.initca}}/ca.pem - type: File - - name: ca-key-pem - hostPath: - path: {{.Values.clusterConfig.initca}}/ca-key.pem - type: File - - name: certs-script - configMap: - name: renew-certs-script - defaultMode: 0755 ---- -apiVersion: v1 -data: - renew-certs.sh: | - #! /bin/bash - kubectl create secret tls -n cert-manager cluster-ca --cert=/tmp/ca.pem --key=/tmp/ca-key.pem --dry-run=client -o yaml > /tmp/new-secret.yaml - kubectl apply -f /tmp/new-secret.yaml -kind: ConfigMap -metadata: - name: renew-certs-script - namespace: cert-manager ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: cert-secret-updater - namespace: cert-manager ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: cert-secret-updater-role - namespace: cert-manager -rules: -- apiGroups: - - "" - resourceNames: - - cluster-ca - resources: - - secrets - verbs: - - '*' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: cert-secret-updater-rbinding - namespace: cert-manager -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: cert-secret-updater-role -subjects: -- kind: ServiceAccount - name: cert-secret-updater - namespace: cert-manager ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: default-deny-egress - namespace: cert-manager -spec: - podSelector: - matchLabels: - block-egress: "true" - policyTypes: - - Egress ---- -{{ end }} diff --git a/attic/templates/resources/pre-gitlab-runner.yaml b/attic/templates/resources/pre-gitlab-runner.yaml deleted file mode 100644 index 75899d35..00000000 --- a/attic/templates/resources/pre-gitlab-runner.yaml +++ /dev/null @@ -1,128 +0,0 @@ -{{- if and (.Values.gitlab_runner.enabled) (.Values.gitlab_runner.createCertSecret) }} -# Pod to update certificates from master nodes -# only runs on control plane nodes (etcd) -# Mounts cert files rotatet by nixos service.mgr and uses it to update gitlab secret -# Always create certs on initial creation, -# Otherwise, cert creation would not happen until cronJob runs -apiVersion: batch/v1 -kind: Job -metadata: - name: cert-create - namespace: gitlab -spec: - template: - metadata: - labels: - block-egress: "true" - annotations: - linkerd.io/inject: disabled - spec: - restartPolicy: Never - serviceAccountName: cert-secret-updater - securityContext: - runAsUser: 12000 - runAsGroup: 13000 - fsGroup: 10000 - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: node-role.kubernetes.io - operator: In - values: - - control-plane - tolerations: - - key: unschedulable - value: "true" - effect: NoSchedule - containers: - - image: bitnami/kubectl:1.24 - name: kubectl - resources: {} - securityContext: - allowPrivilegeEscalation: false - command: - - "/bin/sh" - - -c - - /tmp/renew-certs/renew-certs.sh - volumeMounts: - - name: ca-pem - mountPath: /tmp/ca.pem - - name: ca-key-pem - mountPath: /tmp/ca-key.pem - - name: certs-script - mountPath: /tmp/renew-certs - volumes: - - name: ca-pem - hostPath: - path: {{.Values.cluster_config.initca}}/ca.pem - type: File - - name: ca-key-pem - hostPath: - path: {{.Values.cluster_config.initca}}/ca-key.pem - type: File - - name: certs-script - configMap: - name: renew-certs-script - defaultMode: 0755 ---- -apiVersion: v1 -data: - renew-certs.sh: | - #! /bin/bash - kubectl create secret tls -n gitlab itp-cluster-ca --cert=/tmp/ca.pem --key=/tmp/ca-key.pem --dry-run=client -o yaml > /tmp/new-secret.yaml - kubectl apply -f /tmp/new-secret.yaml -kind: ConfigMap -metadata: - name: renew-certs-script - namespace: gitlab ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: cert-secret-updater - namespace: gitlab ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: cert-secret-updater-role - namespace: gitlab -rules: -- apiGroups: - - "" - resourceNames: - - itp-cluster-ca - resources: - - secrets - verbs: - - '*' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: cert-secret-updater-rbinding - namespace: gitlab -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: cert-secret-updater-role -subjects: -- kind: ServiceAccount - name: cert-secret-updater - namespace: gitlab ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: default-deny-egress - namespace: gitlab -spec: - podSelector: - matchLabels: - block-egress: "true" - policyTypes: - - Egress ---- -{{- end }} diff --git a/attic/templates/resources/pre-linkerd.yaml b/attic/templates/resources/pre-linkerd.yaml deleted file mode 100644 index d59ad3da..00000000 --- a/attic/templates/resources/pre-linkerd.yaml +++ /dev/null @@ -1,206 +0,0 @@ -{{ if .Values.linkerd.enabled }} ---- -apiVersion: v1 -kind: Namespace -metadata: - labels: - linkerd.io/control-plane-ns: linkerd - linkerd.io/is-control-plane: 'true' - config.linkerd.io/admission-webhooks: disabled - annotations: - linkerd.io/inject: disabled - argocd.argoproj.io/sync-wave: "-1" - name: linkerd ---- -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: linkerd-trust-anchor - namespace: linkerd -spec: - ca: - secretName: linkerd-trust-anchor ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: linkerd-identity-issuer - namespace: linkerd -spec: - revisionHistoryLimit: 5 - secretName: linkerd-identity-issuer - duration: 48h0m0s - renewBefore: 25h0m0s - issuerRef: - name: linkerd-trust-anchor - kind: Issuer - dnsNames: - - identity.linkerd.cluster.local - isCA: true - privateKey: - algorithm: ECDSA - usages: - - cert sign - - crl sign - - server auth - - client auth ---- -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: webhook-issuer - namespace: linkerd -spec: - ca: - secretName: webhook-issuer-tls ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: linkerd-policy-validator - namespace: linkerd -spec: - revisionHistoryLimit: 5 - secretName: linkerd-policy-validator-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: linkerd-policy-validator.linkerd.svc - dnsNames: - - linkerd-policy-validator.linkerd.svc - privateKey: - algorithm: ECDSA - encoding: PKCS8 - usages: - - server auth ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: linkerd-proxy-injector - namespace: linkerd -spec: - revisionHistoryLimit: 5 - secretName: linkerd-proxy-injector-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: linkerd-proxy-injector.linkerd.svc - dnsNames: - - linkerd-proxy-injector.linkerd.svc - privateKey: - algorithm: ECDSA - usages: - - server auth ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: linkerd-sp-validator - namespace: linkerd -spec: - revisionHistoryLimit: 5 - secretName: linkerd-sp-validator-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: linkerd-sp-validator.linkerd.svc - dnsNames: - - linkerd-sp-validator.linkerd.svc - privateKey: - algorithm: ECDSA - usages: - - server auth ---- -{{ if .Values.linkerd.viz.enabled }} -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: webhook-issuer - namespace: linkerd-viz -spec: - ca: - secretName: webhook-issuer-tls -# ignore if not using the viz extension -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: tap - namespace: linkerd-viz -spec: - revisionHistoryLimit: 5 - secretName: tap-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: tap.linkerd-viz.svc - dnsNames: - - tap.linkerd-viz.svc - isCA: false - privateKey: - algorithm: ECDSA - usages: - - server auth ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: linkerd-tap-injector - namespace: linkerd-viz -spec: - revisionHistoryLimit: 5 - secretName: tap-injector-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: tap-injector.linkerd-viz.svc - dnsNames: - - tap-injector.linkerd-viz.svc - privateKey: - algorithm: ECDSA - usages: - - server auth ---- -{{ end }} -{{ if .Values.linkerd.jaeger.enabled }} -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: webhook-issuer - namespace: linkerd-jaeger -spec: - ca: - secretName: webhook-issuer-tls ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: jaeger-injector - namespace: linkerd-jaeger -spec: - revisionHistoryLimit: 5 - secretName: jaeger-injector-k8s-tls - duration: 24h0m0s - renewBefore: 1h0m0s - issuerRef: - name: webhook-issuer - kind: Issuer - commonName: jaeger-injector.linkerd-jaeger.svc - dnsNames: - - jaeger-injector.linkerd-jaeger.svc - privateKey: - algorithm: ECDSA - usages: - - server auth -{{ end }} -{{ end }} diff --git a/attic/templates/resources/x509-certificates.yaml b/attic/templates/resources/x509-certificates.yaml deleted file mode 100644 index a488fd04..00000000 --- a/attic/templates/resources/x509-certificates.yaml +++ /dev/null @@ -1,48 +0,0 @@ -{{- if .Values.x509_exporter.alerts }} -apiVersion: monitoring.coreos.com/v1 -kind: PrometheusRule -metadata: - labels: - # Some labels for various prometheus matching - k8s-app: x509-exporter - prometheus: k8s - role: alert-rules - name: x509-exporter-x509-certificate-exporter - namespace: x509-exporter -spec: - groups: - - name: x509-certificate-exporter.rules - rules: - - alert: X509ExporterReadErrors - annotations: - description: Over the last 15 minutes, this x509-certificate-exporter instance has experienced errors reading certificate files or querying the Kubernetes API. This could be caused by a misconfiguration if triggered when the exporter starts. - summary: Increasing read errors for x509-certificate-exporter - expr: delta(x509_read_errors[15m]) > 0 - for: 5m - labels: - severity: warning - - alert: CertificateError - annotations: - description: Certificate could not be decoded {{`{{`}}if $labels.secret_name {{`}}`}} in Kubernetes secret "{{`{{`}} $labels.secret_namespace {{`}}`}}/{{`{{`}} $labels.secret_name {{`}}`}}"{{`{{`}}else{{`}}`}}at location "{{`{{`}} $labels.filepath {{`}}`}}"{{`{{`}}end{{`}}`}} - summary: Certificate cannot be decoded - expr: x509_cert_error > 0 - for: 15m - labels: - severity: warning - - alert: CertificateRenewal - annotations: - description: Certificate for "{{`{{`}} $labels.subject_CN {{`}}`}}" should be renewed {{`{{`}}if $labels.secret_name {{`}}`}}in Kubernetes secret "{{`{{`}} $labels.secret_namespace {{`}}`}}/{{`{{`}} $labels.secret_name {{`}}`}}"{{`{{`}}else{{`}}`}}at location "{{`{{`}} $labels.filepath {{`}}`}}"{{`{{`}}end{{`}}`}} - summary: Certificate should be renewed - expr: ((x509_cert_not_after{secret_name!="linkerd-identity-issuer", issuer_O="", issuer_CN!="webhook.linkerd.cluster.local"} - time()) / 86400) < 28 - for: 15m - labels: - severity: warning - - alert: CertificateExpiration - annotations: - description: Certificate for "{{`{{`}} $labels.subject_CN {{`}}`}}" is about to expire {{`{{`}}if $labels.secret_name {{`}}`}}in Kubernetes secret "{{`{{`}} $labels.secret_namespace {{`}}`}}/{{`{{`}} $labels.secret_name {{`}}`}}"{{`{{`}}else{{`}}`}}at location "{{`{{`}} $labels.filepath {{`}}`}}"{{`{{`}}end{{`}}`}} - summary: Certificate is about to expire - expr: ((x509_cert_not_after{secret_name!="linkerd-identity-issuer", issuer_O="", issuer_CN!="webhook.linkerd.cluster.local"} - time()) / 86400) < 14 - for: 15m - labels: - severity: critical -{{- end }} diff --git a/attic/templates/seq.yaml b/attic/templates/seq.yaml deleted file mode 100644 index bcb8f87a..00000000 --- a/attic/templates/seq.yaml +++ /dev/null @@ -1,22 +0,0 @@ -{{- if .Values.seq.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: seq - namespace: argocd -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: seq - sources: - - repoURL: https://helm.datalust.co - targetRevision: 2024.1.0 - chart: seq - helm: - valueFiles: - - $values/values/seq/values.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values -{{- end }} diff --git a/attic/templates/sorcerer.yaml b/attic/templates/sorcerer.yaml deleted file mode 100644 index f348fc80..00000000 --- a/attic/templates/sorcerer.yaml +++ /dev/null @@ -1,58 +0,0 @@ -{{ if .Values.sorcerer.enabled }} -{{- range .Values.atlantis.envs }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: prod-sorcerer - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: prod-sorcerer - server: https://10.255.241.99:4443 - project: atlantis - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - ref: values - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: values/sorcerer - plugin: - name: kustomize-helm-with-rewrite - parameters: - - name: env - string: prod - - name: hostname - string: sorcerer.data.oceanbox.io - - repoURL: https://charts.bitnami.com/bitnami - targetRevision: 20.1.7 - chart: redis - helm: - valueFiles: - - $values/values/sorcerer/prod/redis.yaml - ignoreDifferences: - - kind: Secret - name: azure-keyvault - jqPathExpressions: - - '.data' - - '.metadata.labels' - - '.metadata.annotations' - - kind: Secret - name: prod-atlantis-rabbitmq - jqPathExpressions: - - '.data' - - '.metadata.labels' - - '.metadata.annotations' - syncPolicy: - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - # automated: - # prune: true - # selfHeal: false -{{- end }} -{{- end }} diff --git a/attic/templates/tempo.yaml b/attic/templates/tempo.yaml deleted file mode 100644 index 6b1ee048..00000000 --- a/attic/templates/tempo.yaml +++ /dev/null @@ -1,90 +0,0 @@ -{{ if .Values.tempo.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: tempo - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: tempo - server: 'https://kubernetes.default.svc' - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{ if .Values.tempo.autosync }} - automated: - prune: true - # selfHeal: false - {{ end }} - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/tempo - targetRevision: HEAD - - repoURL: 'https://grafana.github.io/helm-charts' - targetRevision: {{ .Values.tempo.version }} - chart: tempo - helm: - values: | - tempo: - reportingEnabled: false - storage: - trace: - backend: s3 - s3: - bucket: {{ .Values.tempo.bucketName | default "tempo-traces" }} - endpoint: {{ .Values.tempo.s3.endpoint | default "https://s3.production.itpartner.no" }} - prefix: traces - access_key: ${S3KEY} - secret_key: ${S3SECRET} - forcepathstyle: true - region: us-east-1 - {{- if .Values.tempo.s3.insecure_skip_verify }} - tls_insecure_skip_verify: true - {{- end }} - local: - path: /var/tempo/traces - wal: - path: /var/tempo/wal - metricsGenerator: - enabled: true - remoteWriteUrl: "http://prom-prometheus.prometheus:9090/api/v1/write" - extraArgs: { config.expand-env=true } - extraEnv: - - name: S3KEY - valueFrom: - secretKeyRef: - name: {{ .Values.tempo.secret.name | default "s3-credentials"}} - key: {{ .Values.tempo.secret.access_key | default "access_key" }} - - name: S3SECRET - valueFrom: - secretKeyRef: - name: {{ .Values.tempo.secret.name | default "s3-credentials"}} - key: {{ .Values.tempo.secret.access_key | default "access_secret" }} - tempoQuery: - ingress: - enabled: true - ingressClassName: nginx - annotations: - cert-manager.io/cluster-issuer: {{ .Values.cluster_config.ingress_clusterissuer }} - nginx.ingress.kubernetes.io/ssl-redirect: "true" - {{- with .Values.cluster_config.ingress_whitelist_ips }} - nginx.ingress.kubernetes.io/whitelist-source-range: {{ join "," . }} - {{- end }} - path: / - pathType: Prefix - hosts: - - query.tempo.{{ .Values.cluster_config.domain }} - tls: - - secretName: tempo-query-tls - hosts: - - query.tempo.{{ .Values.cluster_config.domain }} -{{ end }} diff --git a/attic/templates/velero.yaml b/attic/templates/velero.yaml deleted file mode 100644 index 1b6142ab..00000000 --- a/attic/templates/velero.yaml +++ /dev/null @@ -1,109 +0,0 @@ -{{ if .Values.velero.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: velero - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true -spec: - destination: - namespace: velero - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/velero - targetRevision: HEAD - - repoURL: 'https://vmware-tanzu.github.io/helm-charts' - targetRevision: {{ .Values.velero.version }} - chart: velero - helm: - values: | - initContainers: - - name: velero-plugin-for-aws - image: velero/velero-plugin-for-aws:v1.9.0 - imagePullPolicy: IfNotPresent - volumeMounts: - - mountPath: /target - name: plugins - credentials: - useSecret: true - existingSecret: {{ .Values.velero.credentials.secretName }} - deployNodeAgent: true - nodeAgent: - podVolumePath: {{ .Values.velero.kubeletRootDir }} - resources: - requests: - cpu: {{ .Values.velero.resources.nodeAgent.request.cpu | default "500m" }} - memory: {{ .Values.velero.resources.nodeAgent.request.memory | default "1Gi" }} - limits: - memory: {{ .Values.velero.resources.nodeAgent.limit.memory | default "2Gi" }} - snapshotsEnabled: false - resources: - requests: - cpu: {{ .Values.velero.resources.velero.request.cpu | default "500m" }} - memory: {{ .Values.velero.resources.velero.request.memory | default "1Gi" }} - limits: - memory: {{ .Values.velero.resources.velero.limit.memory | default "1Gi" }} - configuration: - uploaderType: kopia - # Backup all volumes by default - defaultVolumesToFsBackup: {{ .Values.velero.backupAllVolumes }} - ## https://velero.io/docs/v1.6/api-types/backupstoragelocation/ - backupStorageLocation: - - name: {{ .Values.velero.bsl }} - bucket: {{ .Values.velero.bucket }} - provider: aws - default: true - ## prefix is the directory under which all Velero data should be stored within the bucket. Optional. - prefix: {{ .Values.cluster_config.cluster }}/velero - accessMode: ReadWrite - config: - ## ONLY us-east-1 region is supported by nutanix - region: {{ .Values.velero.s3.region }} - s3ForcePathStyle: "true" - s3Url: {{ .Values.velero.s3.url }} - {{- if .Values.velero.s3.insecureSkipTLSVerify }} - insecureSkipTLSVerify: true - {{- end }} - metrics: - serviceMonitor: - enabled: true - additionalLabels: - k8s-app: "velero" - release: "prometheus" - prometheusRule: - enabled: true - # namespace: "" - # Rules to be deployed - spec: - - alert: VeleroBackupPartialFailures - annotations: - message: Velero backup {{` {{ $labels.schedule }} `}} has {{` {{$value | humanizePercentage}} `}} partialy failed backups. - expr: |- - velero_backup_partial_failure_total{schedule!=""} / velero_backup_attempt_total{schedule!=""} > 0.25 - for: 15m - labels: - severity: critical - - alert: VeleroBackupFailures - annotations: - message: Velero backup {{` {{$labels.schedule}} `}} has {{` {{$value | humanizePercentage}} `}} failed backups. - expr: |- - velero_backup_failure_total{schedule!=""} / velero_backup_attempt_total{schedule!=""} > 0.25 - for: 15m - labels: - severity: critical - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.velero.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{- end }} diff --git a/attic/templates/wordpress.yaml b/attic/templates/wordpress.yaml deleted file mode 100644 index 8529f258..00000000 --- a/attic/templates/wordpress.yaml +++ /dev/null @@ -1,22 +0,0 @@ -{{- if .Values.wordpress.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: www-oceanbox - namespace: argocd -spec: - project: default - destination: - server: https://kubernetes.default.svc - namespace: www-oceanbox - sources: - - repoURL: https://charts.bitnami.com/bitnami - targetRevision: 19.2.2 - chart: wordpress - helm: - valueFiles: - - $values/values/wordpress/values.yaml - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: HEAD - ref: values -{{- end }} diff --git a/attic/templates/x509-exporter.yaml b/attic/templates/x509-exporter.yaml deleted file mode 100644 index 659acc2b..00000000 --- a/attic/templates/x509-exporter.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{ if .Values.x509_exporter.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: x509-exporter - namespace: argocd - annotations: - argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - destination: - namespace: x509-exporter - server: 'https://kubernetes.default.svc' - sources: - - repoURL: {{ .Values.cluster_config.manifests }} - path: {{ .Values.cluster_config.policies }}/x509-exporter - targetRevision: HEAD - - repoURL: 'https://charts.enix.io' - targetRevision: {{ .Values.x509_exporter.version }} - chart: x509-certificate-exporter - helm: - values: | - secretsExporter: - excludeNamespaces: - - sealed-secrets - excludeLabels: - - cert-manager.io/* - resources: - limits: - memory: 100Mi - requests: - cpu: 20m - memory: 100Mi - prometheusServiceMonitor: - extraLabels: - k8s-app: x509-exporter - prometheusRules: - create: false - project: sys - syncPolicy: - managedNamespaceMetadata: - labels: - component: sys - syncOptions: - - CreateNamespace=true - - ApplyOutOfSyncOnly=true - {{- if .Values.x509_exporter.autosync }} - automated: - prune: true - # selfHeal: false - {{- end }} -{{ end }} diff --git a/attic/templates/yolo-dl.yaml b/attic/templates/yolo-dl.yaml deleted file mode 100644 index 4184573a..00000000 --- a/attic/templates/yolo-dl.yaml +++ /dev/null @@ -1,16 +0,0 @@ -{{- if .Values.yolo-dl.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: yolo-dl - namespace: argocd -spec: - project: aux - destination: - server: https://10.255.241.99:4443 - namespace: oceanbox - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: charts/yolo-dl -{{- end }} diff --git a/attic/templates/yolo-registry.yaml b/attic/templates/yolo-registry.yaml deleted file mode 100644 index 19985466..00000000 --- a/attic/templates/yolo-registry.yaml +++ /dev/null @@ -1,16 +0,0 @@ -{{- if .Values.yolo-registry.enabled }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: yolo-registry - namespace: argocd -spec: - project: aux - destination: - server: https://kubernetes.default.svc - namespace: yolo - sources: - - repoURL: https://gitlab.com/oceanbox/manifests.git - targetRevision: main - path: charts/yolo-registry -{{- end }} diff --git a/attic/values.yaml b/attic/values.yaml deleted file mode 100644 index f2b7ffa2..00000000 --- a/attic/values.yaml +++ /dev/null @@ -1,404 +0,0 @@ -cluster_config: - manifests: https://gitlab.com/oceanbox/manifests.git - policies: policies/sys - resources: resources/sys - distro: "" #[nixos, talos] - env: "" #[dev, test, staging, prod] - initca: "" - domain: "itpartner.no" - apiserver: "" - apiserverip: "" - etcd_nodes: [] - k8s_nodes: [] - cluster: "" - ingress_nodes: [] - ingress_replica_count: 3 - fileserver: "" - acme_email: "" - nodenames: [] - nodes: [] - ingress_clusterissuer: "letsencrypt-production" - ingress_whitelist_ips: - - 10.0.0.0/8 - - 172.16.0.0/12 - - 192.168.0.0/16 - - 172.19.255.0/24 - external_kubectl_access: - enabled: false - admin_group: "" - external_access: - enabled: false - admin_group: "" - groups: [] - #- group_id: - # - "" - # name: - # namespaces: - # - - oidc: [] - #- name: azure-oidc - # provider: azuread - # tenant: "https://login.microsoftonline.com//oauth2/v2.0" - # secret_ref: - # name: azure-oidc - # group_id: "" - #- name: github-oidc - # provider: github - # secret_ref: - # name: github-oidc - # allowed_organizations: - # allowed_teams: - - -argocd: - autosync: true - version: 7.5.2 - ingress: - enabled: true - adminLogin: false - anyNamespaces: - enabled: false - kustomizeHelmSupport: false - applicationset_webhook: - enabled: false - additional_rbac_settings: [] - resources: - controller: - memory: "" - repoServer: - cmp: - enabled: false - name: "" - image: "" - imagePullSecret: [] - helmTokenSecret: "" -argocd_apps: - enable: true - autosync: true - version: 0.0.1 -argo_workflows: - enabled: false - autosync: true - version: 0.45.0 - metrics: - enabled: false - allowed_namespaces: [] -argo_rollouts: - enabled: false - autosync: true - version: 2.35.2 - metrics: - enabled: false - dashboard_enabled: false - -cilium: - enabled: false - autosync: true - version: 1.16.2 - spire: - enabled: false - policyAuditMode: false - encryption: - enabled: true - type: ipsec - endpointStatus: - enabled: true - kubeProxyReplacement: false - k8sServiceHost: localhost - k8sServicePort: 7445 - nodePort: - enabled: false - # NOTE: requires that ingressconroller is also enabled (bug) - gatewayAPI: - enabled: false - ingressController: - enabled: false - defaultClass: false - loadbalancerMode: shared - l2announcement: - enabled: false - k8sClientRateLimit: - qps: 10 - burst: 3 - loadbalancerPool: - enabled: false - cidr: [] - envoy: - enabled: false - hubble: - ui: true - upgradeCompatability: "" -linkerd: - enabled: true - autosync: true - version: 1.9.3 - trustAnchorPEM: | - -----BEGIN CERTIFICATE----- - -----END CERTIFICATE----- - webhookPEM: | - -----BEGIN CERTIFICATE----- - -----END CERTIFICATE----- - identyIssuerPEM: "" - secretScheme: kubernetes.io/tls - crds: - version: 1.4.0 - multicluster: - version: 30.2.0 - enabled: false - viz: - enabled: false - jaeger: - enabled: false -thanos: - enabled: false - autosync: true - version: 8.3.0 - pagerdutyRoutingKey: "" -prometheus: - enabled: true - autosync: true - version: 62.7.0 - # Helm chart version, and app version is different. CRD version MUST be equals to chart's APP version - crd_version: 14.0.0 - certRenewCronEnabled: true - snitchUrl: "" - oncallUrl: "" - pagerdutyRoutingKey: "" - fullname: "" - # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml#L47 - defaultRules: {} - additionalScrapeConfigs: [] - additionalDataSources: [] - enableFeatures: [] - storage: - size: 50Gi - grafana: - defaultDashboardsEnabled: true - persistence: false - disable_login_form: true - plugins: [] - coredns: - targetPort: "" - etcd: - targetPort: "" - scheduler: - targetPort: "" - kubelet: - enabled: false - https: false - thanos: - enabled: false - datasource: - enabled: false -nfs_provisioner: - enabled: true - autosync: true - version: 4.0.13 - archiveOnDelete: true - defaultClass: true - extraMountOpts: [] -cert_manager: - autosync: true - version: 1.12.13 -kubernetes_dashboard: - enabled: false - autosync: true - version: v2.3.1 -metrics_server: - autosync: true - version: 3.8.2 - ignoreTLS: false -nginx: - enabled: true - autosync: true - version: 4.8.3 - pdb: - minAvailable: 1 - resources: - controller: - cpu: "100m" - memory: "100Mi" -kyverno: - enabled: false - autosync: true - metrics: false - version: 3.2.5 - resources: - cleanupController: - memory: "64Mi" - reportsController: - memory: "64Mi" - backgroundController: - memory: "64Mi" -velero: - enabled: true - autosync: true - version: 6.0.0 - kubeletRootDir: "/var/lib/kubernetes/pods" - bucket: velero-backup - bsl: default - # Opt-in or opt-out pvc backup - # https://velero.io/docs/main/file-system-backup/#to-back-up - backupAllVolumes: true - credentials: - secretName: "s3-credentials" - s3: - region: us-east-1 - url: "https://nutanix-obj-s3.kube-system" - insecureSkipTLSVerify: true - resources: - velero: - request: - cpu: 500m - memory: 1Gi - limit: - memory: 2Gi - nodeAgent: - request: - cpu: 500m - memory: 1Gi - limit: - memory: 2Gi -x509_exporter: - enabled: true - autosync: true - alerts: true - version: 3.6.0 -downscaler: - enabled: false - autosync: true - version: 0.2.12 - extraConfig: | - DEFAULT_UPTIME: "Mon-Fri 07:00-20:00 Europe/Berlin" - excludedNamespaces: - - py-kube-downscaler - - kube-downscaler - - kube-system - -actions_runner_controller: - enabled: false - autosync: true - version: 0.23.7 -gitlab_runner: - enabled: true - autosync: true - version: 0.39.0 - createCertSecret: true - tag: "obx" - s3: - server: "" - access_key: "" - secret_key: "" -postgres_operator: - enabled: true - autosync: true - version: 0.18.2 -rabbitmq_operator: - enabled: false - autosync: true - version: 4.3.27 -jaeger_operator: - enabled: false - autosync: true - version: 1.38.0 -loki: - enabled: false - autosync: true - version: 6.12.0 - compactor: false - s3: - endpoint: "" - region: "" - insecure_skip_verify: false - secret: - name: "" - access_key: "" - access_secret: "" - buckets: - chunks: "" - ruler: "" - admin: "" -tempo: - enabled: false - autosync: true - version: 1.14.0 - s3: - endpoint: "" - region: "" - insecure_skip_verify: false - secret: - name: "" - access_key: "" - access_secret: "" - bucketName: "" -otel: - enabled: false - autosync: true - version: 0.107.0 -promtail: - enabled: false - autosync: true - version: 6.6.1 -mariadb_operator: - enabled: false - autosync: true - version: 0.30.0 -chartmuseum: - enabled: false - autosync: true - version: 3.10.2 - storage: - size: 8Gi - ingress: - enabled: true -clickhouse_operator: - enabled: false - autosync: true - version: 0.24.4 -oncall: - enabled: false - externalGrafana: - url: "" -dapr: - enable: true - -busynix.enable: false -headscale.enable: false -plausible.enable: false -dex.enable: false -keycloak.enable: false -rabbitmq.enable: false -redis.enable: false -wordpress.enable: false -yolo-dl.enable: false -yolo-registry.enable: false -osm-tile-server.enable: false -geoserver.enable: false - -install: - argo: - autosync: true - argocd: - enabled: true - apps: - enabled: true - rollouts: - enabled: false - workflows: - enabled: false - atlantis: - enabled: false - envs: - - prod - - staging - sorcerer: - enabled: false - envs: - - prod - - staging - openfga: - enabled: false - envs: - - prod - - staging - diff --git a/attic/values/archmeister/base/deployment_patch.yaml b/attic/values/archmeister/base/deployment_patch.yaml deleted file mode 100644 index c8368399..00000000 --- a/attic/values/archmeister/base/deployment_patch.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/livenessProbe/httpGet/path - value: /healthz -- op: replace - path: /spec/template/spec/containers/0/readinessProbe/httpGet/path - value: /healthz -- op: add - path: /spec/template/spec/containers/0/envFrom - value: [] diff --git a/attic/values/archmeister/base/kustomization.yaml b/attic/values/archmeister/base/kustomization.yaml deleted file mode 100644 index b0ce8979..00000000 --- a/attic/values/archmeister/base/kustomization.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -patches: -- path: deployment_patch.yaml - target: - group: apps - kind: Deployment - version: v1 -resources: -- _manifest.yaml diff --git a/attic/values/archmeister/chart b/attic/values/archmeister/chart deleted file mode 100644 index e898131e..00000000 --- a/attic/values/archmeister/chart +++ /dev/null @@ -1 +0,0 @@ -oceanbox/archmeister diff --git a/attic/values/archmeister/prod/appsettings.json b/attic/values/archmeister/prod/appsettings.json deleted file mode 100644 index ff4fb40c..00000000 --- a/attic/values/archmeister/prod/appsettings.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "connString": "Username=app;Password=secret;Host=prod-archmeister-rw;Port=5432;Database=app;Pooling=true;", - "oidc": { - "issuer": "https://idp.oceanbox.io/dex", - "authorization_endpoint": "https://idp.oceanbox.io/dex/auth", - "token_endpoint": "https://idp.oceanbox.io/dex/token", - "jwks_uri": "https://idp.oceanbox.io/dex/keys", - "userinfo_endpoint": "https://idp.oceanbox.io/dex/userinfo", - "device_authorization_endpoint": "https://idp.oceanbox.io/dex/device/code", - "clientId": "archmeister", - "clientSecret": "", - "scopes": [ - "openid", - "email", - "offline_access", - "profile" - ] - }, - "sso": { - "cookieDomain": ".oceanbox.io", - "signedOutRedirectUri": "https://idp.oceanbox.io/dex/static/logout.html", - "redis": "prod-redis-master.redis.svc,user=default,password=secret", - "appDomain": "atlantis", - "dataProtectionKeys": "DataProtection-Keys" - }, - "allowedOrigins": [ - "https://maps.oceanbox.io", - "https://atlantis.srv.oceanbox.io", - "https://maps.relic.oceanbox.io", - "https://sorcerer.data.oceanbox.io", - "https://sorcerer.ekman.oceanbox.io", - "https://sorcerer.jonas.ekman.oceanbox.io", - "https://sorcerer.simkir.ekman.oceanbox.io", - "https://sorcerer.stig.ekman.oceanbox.io", - "https://atlantis.beta.oceanbox.io", - "https://atlantis.jonas.dev.oceanbox.io", - "https://atlantis.stig.dev.oceanbox.io", - "https://atlantis.simkir.dev.oceanbox.io", - "https://atlantis.local.oceanbox.io:8080" - ], - "logService" : "https://seq.adm.oceanbox.io", - "logApiKey": "", - "cliUsers": [ - "admin:en-to-tre-fire" - ], - "cerbosUrl": "http://prod-cerbos.idp.svc:3593", - "deployEnv": "prod" -} diff --git a/attic/values/archmeister/prod/default.env b/attic/values/archmeister/prod/default.env deleted file mode 100644 index 5aa261a6..00000000 --- a/attic/values/archmeister/prod/default.env +++ /dev/null @@ -1,2 +0,0 @@ -OIDC_CLIENT_SECRET=ieK3yak9zoh3yeewee8quahY6seiv7Ro -SEQ_APIKEY=mxv08mP4RDQE7vgUkbfC diff --git a/attic/values/archmeister/prod/deployment_patch.yaml b/attic/values/archmeister/prod/deployment_patch.yaml deleted file mode 100644 index 1e899e2d..00000000 --- a/attic/values/archmeister/prod/deployment_patch.yaml +++ /dev/null @@ -1,44 +0,0 @@ -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: prod-archmeister-app - key: password -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: prod-archmeister-app - key: username -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_HOST - value: prod-archmeister-rw -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_USER - value: default -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: prod-redis - key: redis-password -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: RABBITMQ_USER - value: user -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: prod-archmeister-env diff --git a/attic/values/archmeister/prod/ingress_patch.yaml b/attic/values/archmeister/prod/ingress_patch.yaml deleted file mode 100644 index 50004710..00000000 --- a/attic/values/archmeister/prod/ingress_patch.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- op: replace - path: /spec/rules/0/http/paths/0/path - value: /internal \ No newline at end of file diff --git a/attic/values/archmeister/prod/kustomization.yaml b/attic/values/archmeister/prod/kustomization.yaml deleted file mode 100644 index 1af54e43..00000000 --- a/attic/values/archmeister/prod/kustomization.yaml +++ /dev/null @@ -1,25 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: prod-archmeister-appsettings - files: - - appsettings.json -secretGenerator: -- name: prod-archmeister-env - envs: - - default.env -patches: -- path: deployment_patch.yaml - target: - version: v1 - group: apps - kind: Deployment -- path: ingress_patch.yaml - target: - group: networking.k8s.io - kind: Ingress - name: prod-archmeister-internal - annotationSelector: oceanbox.io/expose=internal - version: v1 -resources: -- ../base diff --git a/attic/values/archmeister/staging/appsettings.json b/attic/values/archmeister/staging/appsettings.json deleted file mode 100644 index aef83340..00000000 --- a/attic/values/archmeister/staging/appsettings.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "connString": "Username=app;Password=secret;Host=staging-archmeister-rw;Port=5432;Database=app;Pooling=true;", - "oidc": { - "issuer": "https://idp.oceanbox.io/dex", - "authorization_endpoint": "https://idp.oceanbox.io/dex/auth", - "token_endpoint": "https://idp.oceanbox.io/dex/token", - "jwks_uri": "https://idp.oceanbox.io/dex/keys", - "userinfo_endpoint": "https://idp.oceanbox.io/dex/userinfo", - "device_authorization_endpoint": "https://idp.oceanbox.io/dex/device/code", - "clientId": "archmeister_dev", - "clientSecret": "", - "scopes": [ - "openid", - "email", - "offline_access", - "profile" - ] - }, - "sso": { - "cookieDomain": ".oceanbox.io", - "signedOutRedirectUri": "https://idp.oceanbox.io/dex/static/logout.html", - "redis": "staging-redis-master.redis.svc,user=default,password=secret", - "appDomain": "atlantis", - "dataProtectionKeys": "DataProtection-Keys" - }, - "allowedOrigins": [ - "https://maps.oceanbox.io", - "https://atlantis.beta.oceanbox.io", - "https://sorcerer.data.oceanbox.io", - "https://sorcerer.ekman.oceanbox.io", - "https://atlantis.jonas.dev.oceanbox.io", - "https://atlantis.stig.dev.oceanbox.io", - "https://atlantis.simkir.dev.oceanbox.io", - "https://atlantis.local.oceanbox.io:8080" - ], - "logService" : "https://seq.adm.oceanbox.io", - "logApiKey": "", - "cliUsers": [ - "admin:en-to-tre-fire" - ], - "cerbosUrl": "http://staging-cerbos.idp.svc:3593", - "deployEnv": "staging" -} diff --git a/attic/values/archmeister/staging/default.env b/attic/values/archmeister/staging/default.env deleted file mode 100644 index 5aa261a6..00000000 --- a/attic/values/archmeister/staging/default.env +++ /dev/null @@ -1,2 +0,0 @@ -OIDC_CLIENT_SECRET=ieK3yak9zoh3yeewee8quahY6seiv7Ro -SEQ_APIKEY=mxv08mP4RDQE7vgUkbfC diff --git a/attic/values/archmeister/staging/deployment_patch.yaml b/attic/values/archmeister/staging/deployment_patch.yaml deleted file mode 100644 index fd4f0400..00000000 --- a/attic/values/archmeister/staging/deployment_patch.yaml +++ /dev/null @@ -1,49 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/env/0 - value: - name: LOG_LEVEL - value: "4" -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: staging-archmeister-app - key: password -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: staging-archmeister-app - key: username -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: DB_HOST - value: staging-archmeister-rw -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_USER - value: default -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: staging-redis - key: redis-password -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: RABBITMQ_USER - value: user -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: staging-archmeister-env diff --git a/attic/values/archmeister/staging/ingress_patch.yaml b/attic/values/archmeister/staging/ingress_patch.yaml deleted file mode 100644 index bb8c50dc..00000000 --- a/attic/values/archmeister/staging/ingress_patch.yaml +++ /dev/null @@ -1,6 +0,0 @@ -- op: replace - path: /spec/rules/0/http/paths/0/path - value: /internal -- op: add - path: /metadata/annotations/nginx.ingress.kubernetes.io~1whitelist-source-range - value: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 diff --git a/attic/values/archmeister/staging/kustomization.yaml b/attic/values/archmeister/staging/kustomization.yaml deleted file mode 100644 index 33c43e00..00000000 --- a/attic/values/archmeister/staging/kustomization.yaml +++ /dev/null @@ -1,25 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: staging-archmeister-appsettings - files: - - appsettings.json -secretGenerator: -- name: staging-archmeister-env - envs: - - default.env -patches: -- path: deployment_patch.yaml - target: - version: v1 - group: apps - kind: Deployment -- path: ingress_patch.yaml - target: - group: networking.k8s.io - kind: Ingress - name: staging-archmeister-internal - annotationSelector: oceanbox.io/expose=internal - version: v1 -resources: -- ../base diff --git a/attic/values/archmeister/values-prod.yaml b/attic/values/archmeister/values-prod.yaml deleted file mode 100644 index ec4ad516..00000000 --- a/attic/values/archmeister/values-prod.yaml +++ /dev/null @@ -1,45 +0,0 @@ -replicaCount: 2 - -podAnnotations: - dapr.io/app-id: "prod-archmeister" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" - -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - hosts: - - host: archmeister.srv.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - hosts: - - archmeister.srv.oceanbox.io - secretName: prod-archmeister-tls - -cluster: - backupEnabled: true - backupRetention: 60d - instances: 2 - -resources: - limits: - cpu: 1000m - memory: 2Gi - requests: - cpu: 200m - memory: 1Gi - diff --git a/attic/values/archmeister/values-staging.yaml b/attic/values/archmeister/values-staging.yaml deleted file mode 100644 index 9ce8a708..00000000 --- a/attic/values/archmeister/values-staging.yaml +++ /dev/null @@ -1,39 +0,0 @@ -replicaCount: 1 -podAnnotations: - dapr.io/app-id: "staging-archmeister" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" -image: - tag: 16390a0c-debug -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - # oceanbox.io/expose: internal - hosts: - - host: archmeister.beta.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - hosts: - - archmeister.beta.oceanbox.io - secretName: staging-archmeister-tls -resources: - limits: - cpu: 1000m - memory: 2Gi - requests: - cpu: 200m - memory: 1Gi diff --git a/attic/values/cerbos/manifests/cerbos-gitlab-token.yaml b/attic/values/cerbos/manifests/cerbos-gitlab-token.yaml deleted file mode 100644 index 234dd730..00000000 --- a/attic/values/cerbos/manifests/cerbos-gitlab-token.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -data: - GITLAB_TOKEN: Z2xwYXQtOTZvWmVwdnNiSnYyMzVXUWVqTnM= -kind: Secret -metadata: - name: cerbos-gitlab-token -type: Opaque diff --git a/attic/values/cerbos/values-prod.yaml b/attic/values/cerbos/values-prod.yaml deleted file mode 100644 index b0dfbdcf..00000000 --- a/attic/values/cerbos/values-prod.yaml +++ /dev/null @@ -1,3 +0,0 @@ -service: - httpNodePort: 30592 - grpcNodePort: 30593 diff --git a/attic/values/cerbos/values-staging.yaml b/attic/values/cerbos/values-staging.yaml deleted file mode 100644 index 3bf5a00a..00000000 --- a/attic/values/cerbos/values-staging.yaml +++ /dev/null @@ -1,3 +0,0 @@ -service: - httpNodePort: 31592 - grpcNodePort: 31593 diff --git a/attic/values/cerbos/values.yaml b/attic/values/cerbos/values.yaml deleted file mode 100644 index 23271b0d..00000000 --- a/attic/values/cerbos/values.yaml +++ /dev/null @@ -1,46 +0,0 @@ -replicaCount: 1 -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -# Spec of the cert-manager certificate to create for the Cerbos deployment. -# If certSpec is not empty, a cert-manager.io/v1/Certificate resource will be created with its spec populated with values from certSpec. -# The certSpec value must be a valid Certificate spec. This Helm chart does not provide any defaults or inject any values into it. -# If cerbos.tlsSecretName is defined, it takes precedence over the generated certificate. -certManager: - certSpec: {} - -# Cerbos service settings. -service: - type: ClusterIP - httpPort: 3592 - grpcPort: 3593 - httpNodePort: 13592 - grpcNodePort: 13593 - annotations: {} - -envFrom: - - secretRef: - name: cerbos-gitlab-token - -cerbos: - httpPort: 3592 - grpcPort: 3593 - tlsSecretName: "" - logLevel: INFO - config: - storage: - driver: "git" - git: - protocol: https - url: https://gitlab.com/oceanbox/cerbos - branch: main - subDir: policies - checkoutDir: /work - updatePollInterval: 60s - https: - username: cerbos - password: ${GITLAB_TOKEN} diff --git a/attic/values/dex/resources/dex-volumes.yaml b/attic/values/dex/resources/dex-volumes.yaml deleted file mode 100644 index 85792216..00000000 --- a/attic/values/dex/resources/dex-volumes.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: pv-oceanbox-dex -spec: - accessModes: - - ReadOnlyMany - capacity: - storage: 50M - mountOptions: - - vers=4.2 - - soft - nfs: - path: /oceanbox/pv-oceanbox-dex - server: 10.255.241.210 - persistentVolumeReclaimPolicy: Retain - volumeMode: Filesystem ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: oceanbox-dex -spec: - accessModes: - - ReadOnlyMany - resources: - requests: - storage: 50M - storageClassName: "" - volumeMode: Filesystem - volumeName: pv-oceanbox-dex diff --git a/attic/values/dex/templates/.config/dotnet-tools.json b/attic/values/dex/templates/.config/dotnet-tools.json deleted file mode 100644 index f65a4aee..00000000 --- a/attic/values/dex/templates/.config/dotnet-tools.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 1, - "isRoot": true, - "tools": { - "fable": { - "version": "3.6.1", - "commands": [ - "fable" - ] - }, - "femto": { - "version": "0.11.0", - "commands": [ - "femto" - ] - } - } -} \ No newline at end of file diff --git a/attic/values/dex/templates/.gitignore b/attic/values/dex/templates/.gitignore deleted file mode 100644 index 1f42bc48..00000000 --- a/attic/values/dex/templates/.gitignore +++ /dev/null @@ -1,355 +0,0 @@ -build/client/* -build/test/* -!build/test/__snapshots__ -dist/ - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ diff --git a/attic/values/dex/templates/.vscode/launch.json b/attic/values/dex/templates/.vscode/launch.json deleted file mode 100644 index 4a1114bc..00000000 --- a/attic/values/dex/templates/.vscode/launch.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "pwa-chrome", - "request": "launch", - "name": "Launch Chrome", - "url": "http://localhost:3000", - "webRoot": "${workspaceFolder}" - } - ] -} \ No newline at end of file diff --git a/attic/values/dex/templates/.vscode/settings.json b/attic/values/dex/templates/.vscode/settings.json deleted file mode 100644 index e58fff5a..00000000 --- a/attic/values/dex/templates/.vscode/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "editor.detectIndentation": false, - "files.trimTrailingWhitespace": true, - "css.styleSheets": [ - "https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css", - "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" - ] -} \ No newline at end of file diff --git a/attic/values/dex/templates/DexTemplates.sln b/attic/values/dex/templates/DexTemplates.sln deleted file mode 100644 index 4bbaf895..00000000 --- a/attic/values/dex/templates/DexTemplates.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "DexTemplates", "src\DexTemplates.fsproj", "{FA05EC30-6BCD-440D-AD18-4F2030BA1E83}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FA05EC30-6BCD-440D-AD18-4F2030BA1E83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA05EC30-6BCD-440D-AD18-4F2030BA1E83}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA05EC30-6BCD-440D-AD18-4F2030BA1E83}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA05EC30-6BCD-440D-AD18-4F2030BA1E83}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/attic/values/dex/templates/README.md b/attic/values/dex/templates/README.md deleted file mode 100644 index 3b10694d..00000000 --- a/attic/values/dex/templates/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Oceanbox IdP - -``` -npm install && npm start -``` - -Other commands: - -```bash -npm test # Run tests -npm run test:watch # Run tests in watch mode -npm test -- --update-snapshots # Update test snapshots -npm run build # Build optimized site for deployment and put in dist/ -``` - -## Vite.js repository structure conventions - -- Put static files in `public/` folder -- Put `index.html` in app root (next to `package.json`) -- Add a reference to the entry JS file (relative path is important): - -```html - -``` diff --git a/attic/values/dex/templates/deploy.sh b/attic/values/dex/templates/deploy.sh deleted file mode 100755 index 0815eba1..00000000 --- a/attic/values/dex/templates/deploy.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -server="root@fs1-0" -path="/vol/brick0/nfs0/k1/pv-oceanbox-dex" -dest="${server}:${path}" - -index=$(basename dist/assets/index-*.js) - -ssh "${server}" -- rm "${path}"/static/js/*.js -scp dist/assets/*.js "${dest}"/static/js/ - -sed -r "s/@index@/${index}/" ./dex/templates/login.html > login.html.$$ -scp ./dex/templates/* "${dest}"/templates/ -scp ./dex/static/*.* "${dest}"/static/ -scp login.html.$$ "${dest}"/templates/login.html -rm login.html.$$ -ssh admin@k1-0.itpartner.intern -- kubectl rollout restart -n oceanbox deployment/dex diff --git a/attic/values/dex/templates/dex/static/img/atlassian-crowd-icon.svg b/attic/values/dex/templates/dex/static/img/atlassian-crowd-icon.svg deleted file mode 100644 index cd94e300..00000000 --- a/attic/values/dex/templates/dex/static/img/atlassian-crowd-icon.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/attic/values/dex/templates/dex/static/img/bitbucket-icon.svg b/attic/values/dex/templates/dex/static/img/bitbucket-icon.svg deleted file mode 100644 index 72f4eb10..00000000 --- a/attic/values/dex/templates/dex/static/img/bitbucket-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/attic/values/dex/templates/dex/static/img/email-icon.svg b/attic/values/dex/templates/dex/static/img/email-icon.svg deleted file mode 100644 index 10f0d8d0..00000000 --- a/attic/values/dex/templates/dex/static/img/email-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Shape - Created with Sketch. - - - - - diff --git a/attic/values/dex/templates/dex/static/img/gitea-icon.svg b/attic/values/dex/templates/dex/static/img/gitea-icon.svg deleted file mode 100644 index afeeacb7..00000000 --- a/attic/values/dex/templates/dex/static/img/gitea-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/attic/values/dex/templates/dex/static/img/github-icon.svg b/attic/values/dex/templates/dex/static/img/github-icon.svg deleted file mode 100644 index 5d607282..00000000 --- a/attic/values/dex/templates/dex/static/img/github-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/attic/values/dex/templates/dex/static/img/gitlab-icon.svg b/attic/values/dex/templates/dex/static/img/gitlab-icon.svg deleted file mode 100644 index e8d408fa..00000000 --- a/attic/values/dex/templates/dex/static/img/gitlab-icon.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - logo-square - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/attic/values/dex/templates/dex/static/img/google-icon.svg b/attic/values/dex/templates/dex/static/img/google-icon.svg deleted file mode 100644 index d667afdf..00000000 --- a/attic/values/dex/templates/dex/static/img/google-icon.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - logo_googleg_48dp - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/attic/values/dex/templates/dex/static/img/keystone-icon.svg b/attic/values/dex/templates/dex/static/img/keystone-icon.svg deleted file mode 100644 index 7a30aba1..00000000 --- a/attic/values/dex/templates/dex/static/img/keystone-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - OpenStack_Logo_Mark - - - - - - - diff --git a/attic/values/dex/templates/dex/static/img/ldap-icon.svg b/attic/values/dex/templates/dex/static/img/ldap-icon.svg deleted file mode 100644 index 506dadc0..00000000 --- a/attic/values/dex/templates/dex/static/img/ldap-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Combined-Shape - Created with Sketch. - - - - - diff --git a/attic/values/dex/templates/dex/static/img/linkedin-icon.svg b/attic/values/dex/templates/dex/static/img/linkedin-icon.svg deleted file mode 100644 index 409bad5e..00000000 --- a/attic/values/dex/templates/dex/static/img/linkedin-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/attic/values/dex/templates/dex/static/img/microsoft-icon.svg b/attic/values/dex/templates/dex/static/img/microsoft-icon.svg deleted file mode 100644 index 739c395a..00000000 --- a/attic/values/dex/templates/dex/static/img/microsoft-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/attic/values/dex/templates/dex/static/img/ob.png b/attic/values/dex/templates/dex/static/img/ob.png deleted file mode 100644 index 8c041554ae1ed64c942a7f90fa9d42be8933fff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584723 zcmZU52|SeR`~Gakkil5W9%CzIsjQK8QizI3$eOZbnPe9;NHb)KP}V|8l$4mV4F;7Y zyR2hc6ve1Si2pM>hx7gYKcDHN$dB?Q7j zgFsNVC?xoeUm#u<{NV6Ed@29}QIcl;fri}C3xc4gTTE~UCqi<*{#ghTW6ydRu8a9X zH;5jKcO1+9Ue)n#xoqEL*|Y1 zJlyuQvoM8Y1UaOS+zr);uYMrt*MM+f|3p0K4E5L=)ezo!O|R+5`jb3yAJ%@Y)lYXi zZK3^Z?vjluVyJcISs7+Be3I}7_rfP0^}K_ZND*(D4kJ>GSr2JXb}b0WSHtpVZrfhN zSqA-JWa@DVkPkJ?Kbu7xx)aA=z zQfo{QbR}3OaZ5}4B>9#@wnyT$cvaiFg++d6HvGTTwi|PC*h-8&p*^={_%2zUa+7gG zHtQYIx=`~I$$9*E!5-gwO-d7e_-iA@ zq@w+=#OrOBfw{T0tflGv+F9-RD(pqMynNQgR?;tuGNF^Wk9rQLIU`q*@s!;0H!?Uj zBIHEIH!25R02486R@vNvQS=`stChrzKo)lJxw1`LFuW^7HMwh14(z^9#s9aqUpF)QY_1NzT z7yAtRfpZ%frj8Si5)!E91$!QzYE4;>)h}~QT*5!E;#0q~fMZ4g6RCYrwNYHoZbI&r zsLzf&W!0_Ukax+F3_N{r7vI7jOp>;F*@^V^i;P}uIKn3n`6vcOtwYp8b<7YGt>k`6 zW!Z%B3r!48hw~!An_5H7C*2wmrX$}faIe3-stgzHpGEEdGzis!*FtoT#xg7*>?(+p zai(}xlJf`xFMfa{2d=A_w2zi${r57&=4H)h#QiFVRGa>YE$+cQ&)PY5R_LMLS7;T6 z*pf{RFVkqfWUAV#M)WoLv3_Zh`DQkdut@ii2!E{U2+7;!n713Rbg9M|{~BV2OPSMT z3Nta&iTIAk$m{E`ncTYZng?#gqO5Zvk%$$65MfPR*~hX>jVuYOlCwz2Rtk45dL<9F zFAur(k>YyRDI&UUguldVDS9aVDI}Ty_(8SRXm@t{x3Zxg*Gp#5)X;@ zh+W>vgwx5E^4(|62qlagQa0l=usnn=RF_RDT|IaGrIs8w{rKmbj7ak;W>K)hGN9@; zvGQXpaU0p1QV#ROB;uoBO0ZL&X@5Pqymuqy#>)&U!FsP;^@t0<=E2v)%-)eSiZi0C zVv<&N`6DT($2|VN(eS2u<)!dqLOvwwP}$+p%Py4TC#3A4)%=Ngc2X53m?-)&aXqk8 z>&YAY{rRvGmTN(pK1uba)?3P3zVpIajqL6c(>yq0F~(L8v3VtGzWx}W%}mqZ0V(Hw z;IGG)CzI7ELsA(DzzNNu9&KM#WOBb%^xM7uD!rRa(_}$sqi-kak62M{OZZE+n?nu} zJ)KigFZ+o5D2CRo+ZT0jE(>_yTvYR)RFAlQT*b@pOv-w4VV?-&kSL^YhSuMRDSY#9 z#1tL3k?wcYWnYnI?!$6vIDR@NA~X!V%lshJC9trK?t0VcZ&<(DSPl_)cCsMw%Dle+THHZS9q0*y60rLaRvr-GNwiA)F>M zcHJX>8SVe9m;Be1%>t7czmvWbi(1%4H*qfLC99V473@@!&6?;ZjKc@WpZ;e2%7dGJ zVe6spqbd{f`5HBw{fE5RiTQ%c$nT+cYmP3<#eL3#6m-Pl%9eF2ip)1cvHQ_|s64R&9%-T4V&Z-ik|zVh zSH}-rLhQ~|zqW41W(qBGIl-31>#Yz4%fZ?`FWPI4xlM86FSVK^?$ZZhv%WZJ{!KHw z9D(lw3S{4?o;zuZ7hpRDsQP}J}eSi%XK7kf0y%1BG>1w znOf7|++QA0J{d3FLY;^?OgKQ@f|K->SlspK*uPKPviY=^GE4+hfywtMA9emq%>&-s zW$w;T7X#8zjq@OQnsuM}UdZEPRaBSA1d z$QXp1&j)We03B-SlFFjnkmhqW2-!HdcUVl4y>u2MmGL6J&;miPg7ddjun(TBRg`MN zTNfOB_K*&BZIGx>s<+u{etrK0`nepN>_fBZA_ zs+;jyt=>9b?L?aqW;mHpraWDo zE{2J;hwm3nT7KH#lOgMT6E$HSUuarpHEQ7C*NJgyO~WOO$aIOE4CVSUpRfljuwaBO zqnMUe{cQ*S`-lwQ2X03(E(LD-g}vlgUEZ8XCr9G334*tgYd{f@;ZJ3Y8 zInvYnhse%@6^u^)Z03wIOQ?x%bO~LEOl^p8w zG3=jVRR4Ux;%Alf9Bc^7%; zMx?Wp8S8Zn8ao}i`gM%<0&C; zM+?f-e&g2VUMD!y!B`ZDF;EDu?gzW-&vJ=U%%(q1g;?4sSoOz|nPYN9n3 z5t55)$%UM47xigBK^k7{p<2-*Ih3nuxVEo5)&I1+`}x_6hSw7 z%*(*uqqnuq^tIJ>C zR(~ge&yIpq%tv(3Z&`0dzSwW>o*nn8E_5x|^fQ(-n%NKG5r&mbe|9l-<0k5pxtRy? zS|+OZ6QRTHVqW~#L^rA#&4(}SscP(OIW$E1C4Karmnq)~Tc)FZMcC>^h1M|sWhTd0W_+Wx+g-iCL3XDwZ= zKLp^692|jPyx26&DzpAzD0VZNaAkQz{C3`HOL@X++P8CW6ETUwov>|W$&V_d+t!13 zNWk+Qe0|x$G!}f1zr(*1jO{L=1+xlZhB!y}qlVtH|DhsC~!ciB>B) zh>}TY=IZ>TzaBB>?*9%6mJQk1X#Yb5AFj^O4mJ?H3)F4;#UuDQ(@c-y@C2}pphI^o zetuS<`qE_{<$GNHo7xwIGWZXzM~z8poE3V|2*LOz7$t!e?m{h0GAK4Pnnu%H%yQcP zp={aC$HJ|kBbIQ!`{C63J4~5vE=wumhGevV4dEpSc~u`!7Zm$X-l=*e=0Q?~&H~Rm z?Gc2$aKF=E-7p z65%tLU{Fcxmlj2DuHt>u%4Ts{n0~V)TnQEh89SrdAHp5oj*}jjr+U47qI3T`MNh|| zk`|ihwC*wViovPB?`zrM1-U{fCaIU1K6`&YeweC7cXPd5{LMeP%^gcvG96JbQn{EF714~*VEVvWUevUA%@K>@yTmHn+k@B z6{+X`25kApM(*|Fb4CuD#WL=*f@ucCr=FBeP>^Zv*^8%T?Ur;ApUm<;9yf;vv|PKc zld%56mo{7UNGmBD0|~6iBjl(ElMNGBLv_|jLq9)ASMA~rF8y#y!aA3d|5aM#{rZJ` zo6DOoQo;Ql(#5Os`P<2AfRt>94VdM*_kP5gjj%DoUbX{^PmuK;W+NHDBiFYnll{#4 zPZ^Ux#TI46ku9(HE>7+#hsfu2|xvotAUG;YHLzhKqoWuLLd=FO`B8-Fi(fEICZQ4lT zt5&iw-5R0^QiC@W9!#3gapK#xpZ#g#`N8uJZsElv$0h98ZeWK5ivKBQd>g6Ta;=2# zn?F0t{hw;B3^3620B9Nq{Qdxo{}dV<$!^7uhO2LcjMnrZzC4qR4&5m5$$# zATYk~n1SR&C&~UfOKl?l;*?hU!z1PZ;t9eEP5%F0I+tn-)q3&GAEb~cpcT0@a{OX) zj>k9A5Bg%@KeuDz1KjVgKWj4-obJ;&Um#-|Tz_&`r2fEm9lpEzm}>+ZjsFG=w{@dB zVtG$0hHm|vHvhBXiVP5pDXvIKUkm`*q(pnEeJbtb>CgKySEsLQzcDf)a1`wPcZA)1 znjW94_0(<*(}WeCijb4!x9Lkgoc?SSM5SroN0*QKiKy1~N2z|_=*FkESv!lW9EuG` zs_|y>Ph0xI%=B%hRG;U|`Nw$7iGFxml|~!tt$57-H_Xp(23&$d7k71xN4#jSzQY!Z zeq}TI!V50}RdQg72Cu53Yj8I9=plN+6ywKxGLJIwVfFrDwVX6J7+ z)~+?q(-T|&i;T(Cww-S!Vfd%4*hs*EZ0CCE{?f@S9&z^W{=+Ml&agr5Bm9kj$5-Qw z%`8`7T4t6jXNZp(1mU;~KoaUm#?t9baNRCP37jC7t9ttl>6yQYJaKoF%7%doVEHpp zH1vJ-F3l=q)s&K`k5s;{DUEv*EwLV?Y}pw-U5sPlt!kSZ!;#gtgv=j|5MC_|$>*^| zQit$J|6#Buo*y;~o-%klN28HjUi`P?x2B{6_b9`Cp&De~_mXDnV%;jk@bl93=Tr%! zR14R>pw@+`k#D0X_cHc`=Y{P4d>}{}dQwG*1wf<4Hb#}DgN6u^DXw47+P7kgY$qDC z<9~*H#PRwP8+}MIsM(9QepRW+J{lIPWFDn27K+WQV58!OA*wK9{O*)JDeO z(K7wfQ?>Qmu4XH^4Wh$bCdazAw4G*G;=fJF#`QRqtNGqUy?l_aQVvX3eY|n=?oU&^ zw>8n+aD4asJ?vu8JP0?Gog{cKpk)u+5&qlH@ck!?f5nXLA2>~OTd~7GGmRa~AZp`w z% z3qhlTqxv8R%~h!f&^k^I5;D=Qg}1oD8s%AIc^8B$4ClqV#K2FlKn`0;n+jH65Qf;u z049Y1+W6^VSpc26$b;o>Qdn?(x;z`R#ANu|-fnXx4^%5$Av+TNR zA;}mNc|`CAR%C*kPtm_zpv}aYdw6fdO9wpUBH4N5AeJkbV7qHs zwo9biRxBJvs^_3S@rh;*-d%?=R4l`52&@@H7=jL75d8wN7Q5s6{4aTW? zJ2aCNcz-)&7M|HI!h&iO-I$G<#~ z*=;ju5laUkwse1igq)!Rzw8^eBdLrVa7US@E5(E#)HdAV86&#kUj!W9xKSG;Q_pK6 ztpz=JU3S?=EZJWM`SGI=t+)R$>Cv!->w&4{g!eZYfr7~8x##)j7^g{jB5>2fHpcWS zrotvr*tT(2jTJqoH+(%MA0rVrefdxo*aLkR+PZ@8@wre8cxZvdAiU=ei)>G2F#WjV zb>L$1S?!hcd!uEExNbg8>8;D7Vc%9Vvq^}REYUZ1 zC)t72UM6M>&mavCOO6Nk>a`LNP)n&tiQ6%y+UH0%ng=4&s6AAU0^u1|rd*fM0+cB` zr}=ibw?6P?iPL5|Q+|%Sb&ky=U8lWp-Bz@1VyX*@7Dx_^*C706baofskc;*&7i`;y zLwVP}zKx(M%oyWq4?CQ^LJR;;i0pQYqO%K4$C#y5?=Xj_v$)#Dlavyn->yH1R==^~Y`tFcI|6I(Yn?ovzLE~@~^ zoq+}HnY_fNg(*c-X*lqnm z*3psRBK8XY5bj0UF0KWUxy3t;y*rYGv7af~9;@NoLbhw3TxS!y-@kt;^w$$6f3VW9 z1En|>UtUp$WE1KMZR$j4gu%__^WF(%)HE8ymvmi&L&Tsa^X?F zIsZ3XfEB*KJ<=o9`IMUOGpfHS3{;eb$3-hn#F* z=O%{iR{b}Yuac}Xg2vMKy&zI90aw+2IQ6sRK2?Iw8`B_h;f|)AJ5K>I1=2qj)k{=xZG1y2q7ald=yd z)^0+$VOPk%iVXVXW|Yl@yt;z3Ar=rlX`7;Y)3V-PX6d7`ttVxDw`da^Ao-YNDb`+o zyHN>B^2@*slkLv)og_!p0_E75sh97v4=%Pd>5HX&sOm1NnzIBP|GWXA$+iLq+(SD~ z(zI}L$J`%JKm6}m8mF}pi)|GV`Oi*P2dx+;Q9VXMDl6m{|LwF={o-D7WtTvOIujK$ z%*fk!e9$XLC9f%Do8okvKswN%IVX}N@&`b?4MZ^t9bzHH`Gx# z872&n<$4a_0zNhHKS*OaL4V)B1Xsy;83vlKjY}}Mn^NWRlgHqG3uwj=DUo}O9W<6n z`Y&#c)jy~COr6Dld39pcJJmM%w;6pq*mdHvZwgoUp>@o3l#(z$(SDfmC;g`DMu*94 z8lAnh>sSEM_M`f7F#q@@p=jdrS-}r8w3A2yjAgQQNsaJVWK$v<|3iq>GaA<6A9bj* z`5jlW9~g$x_R-$Ij|A}8!Yi@$nz@Og&1Z9CzW?UaJX}_J#5DKwgevJb4{xJxx*w+| zROcmK!~G*Jfgwm&e|V(txu>fvQ<-#@vQ2npxTeY`*P|l`=~Y(UoZEVr)x4r5H#38I z0*ZE8CR$fp__e+mHON`H%eWts1#p({LC{WkC+|Rqq&H~pl_AwCyu~Rnd7=}1jnLsA zreZ~Hr!9=&3wF+o{sp!q{*x*1nyWgUX5UJ_b=2;Ye)28D*hfjcjTAH5WbuWs08vcB zxFj1?86zeh@=IBkm{vyAnUzgw3q(w;#7}B+!{? zi`IG(1Xt$W<(vtK#iV_Y?-H7E;r+UpEAKj0{H}jzc0jYjFtuJ6HCY zkHlSY=34X{6af8g5!7`Pm-)gcmA{M17gMA3^qgqL-5&vTH!fPbi5tGxr8)lx$k^Yhu^ve>VC2PgLy z6XnV20X4)Yz|PcPa6Oo#8#BgG*q@)GKccrEuzI?W&>>qFWtqF^ycG{mg`EHZ+~`$+ zlWnI0M2VFJF7d=f@PVJKPdC$x?{&#V=FYj$K(idr>%FA%WgdWG zlP!xwFNznqGxv5C-ALb`_)6Wl47$q3bsl*z@vZ`<^3P5t z502iWl2g^h#pFxjuda!L=_&+B0)xLqBLA>Q{bPJ{DVqblUeYGfV&C9xP)`J11;1tr zk;27*1YslrCt1Nl>9F!J{3KaF2aPZER%Y(+;$DDteUSA@_rX~?Tv;58h_UsX89EE@ zIG4v3MJo#`+-E0d55n&vA z{QHHr<0h@7Ta)APa=v8cZkudm9y}7g!qt!oZd!75bCxQ%D`RIU?OANh7r{t?9+f#l zp7f|Ty=*(TAl7v&FlTXz=ebhX?hs)LtSkd~c`s574#Wc~wrsl(C~1@0`o^-xOprBo zERxyiMS98K6--^SzGAB!7Kd89D7vysspU8z5}WWbN0{d1HvlH!lc?z)I zK1o`xmnVI&0>RmhPVB>e-0%ixip`xM@^YgvHnw|buvq#T(Tbqo1GvEeAqoENnYEgG zv9J3S9cM~-iOrmty_NG{hZ8~1w;gVVv%j-m@#oQ-nPW5%3%SUD!<}iw$qxp7wgT%( zg$mfdn(?)w*#`sM3tQ-(&i6;~>gEZQ+z8{5vs}lM^6&s=5T){v1Ya-tYGLGj1eMEq zORr>-ojo%b>-U;OB;Q1c;52<7YyJ$}M@^s&%yMEJ8?4tE7|Z{3xYdR$kN=oCYp9%_ z(M;YgWw=cqw1@@`TQMs=g*TCoa`g{8A=aB~NfJ*u{Q+U&LDG&b zwVdsf$->#=;11dIZT-7ihW8e9eU-zQ`c_DgvgJf%i^-qrkeH<`#Uu`_%t_@j^|*#} z!{#Frdh#|oYit8rpiGtUTwT)ZUFRr3FgD2fLl+U6`muZpcPuKke!=vl4Mh^D*|^1{ zJhP$nHAJKZLM`qk7Q{0Y$uREX1|4@W?#FExO3kPotk8*XqB@)Q=M0fDyPFsKECVFm?TNJd8!+^c{e11m!*=*S}DA2mzUQo&veDoDd~h|FBs=XbLhwP$n%m**$yz zc~2>()H3RDEF&mg+rr6%Z=%#1yAqUVYw(8yulMXo+19*s2Y&XaJ(1WkDzw{NU2LKL zApo0xL67ndwBhNvx#yst&@k4KNK8e9q*9a~@+C$%@j-E{ef6I*R-@!kMkUmtYK>#L z;|w@+V5_?@uWg~ay8{avf68>_%=6&%-G!R{&ykjiE|e}yI5%7w(g}jvoq4_Y!`vJf1R%Lp*=ka+6f#$t#O&%lTxL-aT=Cm*~2# zYOZiV0P2rPi;x8PunynNz#J$DlscIeW14{(wq2C;QprB2R^S6O-0YjJ@vn+k5Mj*d(d%_5gXA30V7uBY3VKB7L5Wpm1@DLFJ-ayBG_hE<7g?MPMaX z@KL?-9Jl;tob>DF0P(atcjduf5Iy<+rhby~qoV|OF5G<9M5MWDbKMaH`<3I_9=H{d zPyL_1cKJEjfpO_PNp6ci-i@_uSruPIGv($68;sWgC->6a`C7=zm;oX*$|ANoPbS)} zd2nkcZ*q^GWE0^WscrADB1kJg2RDkc>f!ykV+>UcAD|_Qxzi9gAbIl9Qs@G~S+|0~ zdq9kJ$BUPknh#wQZ5EGDbS1XR4(InB;Mbz3L) zFrh`BTNV*B=ElW7^0NI~bXlW9GHrjo3wN_YrP(E}h{I(Py`OK$iBwrY*@fSrX5KO+>tq zY4lfi1-OE4IYXBy#4k9zP<;j^Z%=`s5A24lUEvr)*Im`-tvR2f5n%6M93=-n8#c}H zEOp2Ee-Nwin$sy9=G2UrBk)rLaJ)eRk;y&SCch|Hq?t}tRFnThlA~f$1K%#^Spa&c z%v#}i!)$v=&Xc0J_HkjX085hP^X&Md0jn7YpKkw`pq=x>7?hk78q*h}arPO3X$CUw zgZJZeDRDWUUq${n!)zJG5u&!%B>RFz%2{6oh*@a2M!WbvKZ!Zb>h= z6E89PD5>?47WSCRRRvo7+exz8#Q>T@3lEvuo5^+5-%B2|q-`1-?I_u1e;ab=KY zpeFu73ykDgAN+<~H|8AleHOK}L-mjF zpGMt6v+FV~;XmLQPT-)MU?IWWA^E86h{Lh>ZA`OgR$IwcHRs4d4aKBm?|q$-H+K6~ zT9)xnN3FpkED&z0`-Av)MLW5K^t(rIU%pb&eY99uaIV~ocJDujCRYhHpsC}Q{Fx$Ikz-G zdT{>EH$*dL&T)t2p=f`uqZ&`kMdK&q+Y?&w93HxHH(QBt9E!1{V(WKQ1*gBVikX8S zs7x7=LC_FDjE^dXZav`GL*=JEr#Ev=KJN|Bo_OObG!v-=SxZBu`mjef(W~?2Xzy2n zaAX1c$Zow`6tUZk(-={z6Y&xdmkOzXR`TOb`iwsiqs41GIXKGo_nn4jkn~+xXY#z&_E@6&Usm7IA))}d4De_8X z1kL?wVFb40juje|HDpUii=Y|aqgxt%q@#I&S}bu}`K-93^0Y53N+w!4KT|v2^ihIs z`VwFByYuf5Zy;+HmCcvpT`27MB#&PB;y8KO^g%6N!o)CQdl+%i@xZ|dCl+O=p1Tp> z%>_oW?2(7cZVV?jmgb3IEQf!g{ib;hst-C#P^@c5WU?m0{Ol1n@eNM$S@Bi;M9Ti) zD`RJY*M2?teKF41SoPN*vWMnH>#5K049c`3<0c$LBl0{hPpdV*L;Z5L1AyzjP~|yF zSV|+hMGcU7S4f>7k#kzC?Vi0!zq(vNFK+32{u9xaq<+8Ds-au~UKgD zRw5JKd>}^06vzb6BD>CZ12A6+U;N9xxgEAm~CyB!rrbR1WR zsO#pK=|=W0bu3pH#NGt-CY5X(qlSph0Ll8&6MgvN&gKDHQDeYm+q5NnuI9wYKy*so zhtu>BIs;P10?uQ4ch_J^M?lQtkgv2I18~L~9AelR_QZ7=L^rQ#y9BG`vp!XaxgD@g z@HIo#)=@b_QA^>iL>?f*_S+WK|Jj5j*~3AXZ01Kzjn=OTF7n#$49>ZI9rGaE4>N7N zP5AY!=T6Mjut97;JAS?t+-&Iv`rm^?aqmRBEKk5e7A_bdJllJv`*0Tf7%QyJ4)9b0 zk(c{T85_;nb0PhA)KBqv{o$bKm$CPMnua;SwgbtbJn^Qbe3&LbPUWZM-0u;kVAi3f z|EhLJ75w8+Eq#PsTnP0?VVHv*Evz>RzRJHCjpFtEd4k0I)|Y|b0n9ZIxa@HtA_1il zx;$oQhNJ%4(N(EV0?e)1hyk{!p0ta_Q&pPiO#A~adkXA^Zs)&El%^?9B=a_;WL9;H zfH^4~%+fVD`yAsQRVKn8bweREqoW%;^lCK*<@o>v#$j8;m~?b{G2#8kq#tj=$qC8< z+`aB~nn?Zf#?~%$#VlU8J*8z4JHgEewe)$=4hlgv_+t#B;><9a*)7Gud%O)KdeeNC z%W?Ni?91T}GSOpBd{VRumP2}g6k$*Uxf_hwz}<0|<-`82qD*2ckX=4BDN_LRN&guu z01sg?0!!Pe`Gjc}?xk|5?3oVNk?Vk?c|{n;?U*)l74)y^B^#SvS1B zKfZ6-W-Rc{1|Y_vu75t?ddh9VN2H8$t^P3p(ROK5Onv+!2K2SoE5GG&RymczTgmg+ z*7WF3ge@#{_ZlJmgH;wguA9^O>B&^#f{G)_0}7b9Tf20B?_|nglthcFdahHBo_AvoeFJyyZQI;=)>>U7^V$Vn(;`eGx|Z{E+A~$k zRsbb+0MTbot4fYxj4k@vc2-y%N{3dHhZj6u-Oo8r;R;I+M*L}j`0@d0mksbM1^l!> z1+a^tKLze+-jqom59X#=izNUhBUU5_={cYCDhrTJjXp$HORm--5TvYT&Hv2yxmU*;o&>%Jn`A&q1VIFdwudJTG@PH3pYzCMM)D&*t zG-B>Im)9fKtaxcd79?|7n+iB}-^-|NwVYpD14@?8iqp;LozykhYOcrYsq0$Tm%0TW z@ejVCYtTlKy3jHBL!cqSrf42j%~2PAJ$y2Tl6(YHt!$J5?i(hPM_ZS!fE*fVM!kZ& zM_0%ETEsAAQZh6%myTwl8vd|@0NB;Vb?(WvnRMQ1$pu&qz~64!N%sdtLLKBp)UE5~ zF!43!l^E`!g;Jo*5IFW1#ge%8Z-kWO%eLIXWVe-Ui?88!knOK_r|!YN*y~{c_o=rA z^2P0hH4D||(bn+$^`l%sqEAClz3Szn7>xWX=abq!f90wN37pbXW`7|2&|u`yUDEQQ z(h)p}6xGigk@81j=W1GvR(9J%w1a|@HV*YckS^eVy>W}E#}5Ztn}eX^m1e5rms4hd zPN|_b*Mlm8GY8tWop`-R;t!)f;KIlG<}P`^tv@s>x-OQJ*nllc#y{xyU*4TSF@T-0 zI=pM{@jFV}m;Fp_AVv^bBBvNx)JW?c5*#8Qu>CZl9xa+|wOY%NXl@nk){$gA> z_JG$rTCbJYqv0i4txy~pFzO+GV@Hw!`YNdXCCM9wamhTxs0QAlesSMDYobW6LW<16 z9dAyIxK(mR;1Kz~@J!-KVli3me%?9pNOLUWCpXic#S(YXWG-dmou6wWwQ$2SO^x|{ z$(N^;L-Aa$0Zyh7$`9yv7eE&GfgSDrN9*}Vrk#*eY3EYrC@t&qbofs8$G2WkjuU)` zdo)wg?>LPv*nh)z@djm}Vprl(IC1&@I`oCN2gl2*r*jE*rs8sy(_;AoYW5C@aoZ+9&hW;***Q^XrYS)-7>APRs&|h?*0nz6g=v5=Wb~Lqhx?6^udGeM0>|RXD zezUT!2sl_~SR5m+ac>u5fgQ+NYjFGeEpHlmN~)3KC_AxY8l?SHYdV+zgT*JT!Z5G+ zFM@2@@PeFP5^DUw&i%3Dxggh^u&1xQk4m_ly>RvS9cy3Z2mbS|;{6ZDqR(y-3A`bc z&`K$P<#L4PQ<3Arna%DC(IDS?p+#5mM`=>&>V}E;*??SsC6s@03y?lqg2PxIX;f~k zfX2OsG*3|blu1FF^YZrnz=ooxTdT}}kX!UkoyX@r4J|C5jGlD~P0#*eR^<6=?Aw#C zx!JcZODN5?r=Kd= zGhEgY!8Vp|~d0Y-p13UBTF3Wi)Uz{{=wK0OB#P40$m!FEh!rGqQ$oVVEz#rh_ zN%{HR%OrMqC|9W?=*pcwxjxg&Ua~G1B67&axpQIZ{Uu7n@~zJR0X=Ni?(j^lbLv5; zt#{i}?;NuC{;{2gc#fdf^AB1W6kM$FLw<8`IKv#jOuQtNG_9fKPozB5Wz&U>DJYev zYi7nB62AdyB~$`6s0}~GT-8Mhr5_MF>KFNi+pIHPs3rb{GKCdDS+ z-{D<8{jE2@x0N4!7Q#-HCk~KX!I-IH{1FHer+BEdIR zN_GLEZTj-b=j=PU#S3Cl3oJ$2?_}4%&MGPYsh*RXc9+95HD&Vcmmtrl+8^|@WKNU{ z%C(6eNlvbCJDaN0d9R2g)AvnU;67hvr6&=8ww9F{K0vym4|{>bpLCJF2R(Ap(gPq} zOeSP1^G=`OfrJxAaRJvQ%0+2QZ6Mc!CZz#(j!*__Y6KrR+-F{9A>RAxp*p_dnIYK9 zYcf=UN9g}+S(J<@_l#Y@Q23tCfW5bdJ8ZqHUOu_1bLGq2p2($@ovk9)Ha6KSbMFIc zpFVH3d-AM)uiCU>Moa!Kles0D^?mzNc!Y&&QXRV(5@@j?%8)j~H!k0RUdfjL(X64_ z^#&7rXz|0MLUBEx%mAQa;hf=-Ac`xcaZa?;+_ILACQ=f=HI4sa`DwM#c0IIArnFz4 zuF(9BxR5$;T&+_){Oxg8;3;oe8U3er?!IAHzmV}+Y2uFi$8I~8_nKAfGfz3L?1VnwU9RR?Rg?1JwMEk0Qre-o<8x^IxG>NfK%~Kvb`O~8G;N+^|&^Cx;vuzg91iB zqFhr~wh3Pigo3Ut8)ay-E>pOe0ZDZOCH{r%kB`~As;3^9iT@n`{ZW*4lKIOut|h&s zznP-wcJJ`ntdCkBQbq*H(|>ZYDw#$a?Y2JdDb*%Dv0k$7UImS>X_|dr>0jpd=UQAz z(5|ZJ_uAJmbk%>Pn=hp)MBGd5o()#$WQ2ncSqX$8Z-;I^#^6~eL7osp%W4rWIPI0u zcs?`CAxzQcM+-i|BSzZ@;8F5fzl+))3`D4rJm2S_nns~RACn4ZAHgCJEAo#rZFBcq zP2qU%!YfI`H>XR1sXt$A)cs34ez$(bHEG=G4ZGtTDzWx*?~Bx{7V>uQ58J7FsX2yE z?eNnHk3L(|d???E(Xn9hgz^Y=CZ$iZopG|;q~eL1;@0Z1d1xiuRzfn__(?E0Yo`m? zeocRvrg5y;U9+r;d`0lx00DqtTMViX8C5Jm&z$w_@$8iabuN{=A}9pvk-^F?+zzl+ zd4IML?vSSxvFn2O%^4LDWXdQjPLnsf@7~FJKQ2XLd6W03?;EfFvrqe^OfD#Rz8ZNg zGb|^6xI1>vE**+Fdlvhr=``eqE_ErvIp4>mtuXi>T=jO1N zBzp+%c@q^hinZ&k;+J~nLsO`QQ>Cyn)zy@dgJoyM)P*rK6icy8f-;%jhQ^jXIpF}( zcujKD5zo)6=|`RKxq#Do&H_^l{$zZ zcm|a#D-@Mn>h}2Fc_(LbE9>r&q=B0v+s~Cbx=mJj9;VmXrKk6)UEs5^>37C!>G~Gh zskT~6D(*e`@Ytx=X)H6)t$A7jcWZ*zAE9{|42+O)QebIaD+PH>{ta9se!%)mLti35 z(e58qg$KrGX5-q2efnekGl4Q{lFEj?=eB4*Bmz#gRYyNK9rGawAAzXl$&oT_IZ1Bq z(!x3%uvwI~93gR+ z457_1zM%_zd>L~|k(oIjjrKCpq66{mW3Or*cl9MQKHfq5Wh--wmKHro=SL?B$2|LP zjfwW&n&}4)_FGXCs6S{6@sV%O)JZArTG!#Dq5pO^-I9kxK4==kWDa^eq()%^}mSc^k z`f9`Y&#E!6T6gSVP#S7sboXlQvD%0_O&f`?X40N%G7DlNM}p(u8(|>}sz9Z^zrrFg zX;F8N)teCgh$vg^kRhuJICOR+Xdpb4J@Yl=PTZq9^0PsZ!#&qkzdfcrZ}qA%d}=pw zQ+henwbR0;-_D`_(v^ib5ik3CwmG{C%C+9IBvx)Q;Vd~t*6otA>-$7bIpue0N~TL- z!1>bUDMW?k)7G#jBLbL|X@S{t%i3f|{!!bxUt=8=1Cmco5lUN0RC~*a93@Odjge|? zV0_`rrTe|eaCl~^blrR69TZ0fYq4urZ>ja_(92V& z?e3abJn4%&tKDDRUwZ688IPBn!@D8sgW0(SKG4w`skWN)OHsJ-<~C%N(JIF55dpt( zO83KUVKpXY8a`WRt8Hq1uFa=7ZaJxJ8dK1`^qg__4hKn*_jywF z+kV>M^^z*Xfj~m>{Q^5kh&~&0K{smp!LiE)dz2E!51#CfHBEin;rdiTCP(K{_JQGZ zpFe30%tzYUC+ho?Dk}SGF4s)T7T$*s@xUp*M1I)mWE8tsGgqUKOq~V5^eHRI( zIFF&g5>}bsROCUgU6^9~@Lg=^n^MB4_0}}Ric-x=ps-)24lgex=E9 zG`yVXE_R}>@Tq#K=t_8>Fp00y1m3$4m|E1Bfy@Aprs$MMT&rEmD)tJ6& zNjQ1iM%KjY@!2gy;`dJ6wjp|<6<#hqHn)E-Q!;K%vVQp<&{1uki;9?OD?R8c__~5I z$^NW*$X9UMH~GishI2XKOo2h|C+T|D6!2x&23>Kf6j3mWe(^oWH{;qxsm_2@F$K@2 z+oy*YTSPk_R|chm`CvA3iEW^Pf++O{#jl$n6C=ZNv3*WaR|=4Rn~UFI15&khskYm7 z!8YrH79Xgl8RA0{s3AE9r+ zJ&-P{*+{35476ex6zbJ^w`1n$5 zPfk#^S(Z$%!cHwM?+$eiCdlkx->EmxYbWH?gr%8j%=rK5R(qWN<5&sx0}co)-dKE! z=rfczF_MEnZ@IS5)*LSg4*Zyu9qIc#H5#W3uO?(uw^5zQRg|lOv+&7ZYOjb$rwn1 ztwuy~33LwULvvMrTP#0;V?}DNilx&btkB-n?1agj;yzVvHkKG+UuP$K+wei^UYpVj z{*&sFOWjr@`-4(0_sLC`k1?9wZBc0uDz$2BE8L?bJJuM6K7BJkL*~H!99xah1k_rk zaM^hK2d-bQPWt3Jx{ZiDqJ~kvNn?2jw3GO~gJ(f*ol=4(ge(K^cgu+uZLbB&A+4}Z zq=ov*vxWWYwYm+HoeQf`<1)LF!q>+0#yAENqly=nW)@btShK26$zV`c#5~WEZ^o0M z^F3a{FTO9buaN)L+|a?3cDIMlemxjD{_Vn38}|qAu;oQ>zZq8Z&z6B&K>4~yOx}}u zo{Of)y9>*1V!9$x5|0K#<5H?PUEEoj$;AxA>#%*58DfMrWI7<;@ZF~LyXCRebJFW= zz>=IBRTE#}C3Zu>(Sj7nZbhZV4K$A4t}>m|y_>MMmTidFn(mbJ`97a=+T#Dwbd_OI zeovc}l9H0{E~PsK1f&F(2BjO8?of~h1p(=lUXbn(77*!F|A)-~W9+@PTWu z-SfIwtoNVr1vNi4L;CW})s|odH^Y9z zE3_3q$~D91?Vb~Spt==^1dLv}I*);{5H>Jup7RExObJ&Qpqgl?B-!op9!3N zW(haASi8+RO5~@PMGv@Eq!NWJGRX<2_n*s0L}Nx>ub;HY--n-BNt1^j2BuCZYApsM z%gqMyv~vpWpzWSf-V+Qyo&aP{&f(XyR-$zay&6pHg@0~TrWb>MtL_@9LVY8RpuRD( ziO)2=GU-OhmGSqU9P6!8f&C2`4~aOhpa?!Kr$=`bH=!9mr--)PK*;UP-#aKCrCY51 z3TM&lo!&`H&8%sFQ3(%sJjT5+fRB|26rH8p*DhX;9Pq=#yV+T$9MUxO=3T%$ao8;=*6^aN>ChLq4 z7jf`t85ZzOb~u)r0^IA;S9d^;@`dDh7am5g|NA^a2%jApGLOpM1&! z?dR!BMF8C$bYS2f$}zRnyICUb-}w9fU;Csudmu^Es|xM*R~6u$`oSd@!%b%bZnp<7 z1e?_Y8dkvcVaoQHv$rj>a-ycPcHb`h`Z+~XoEVIyk8UuHqMX08?l)wUgvYE^!R9?X z&=GB~390O~_&3c{8oU8bI!%cLaLz?4j^uMnnF%dJtB@cBM~i?t!b=i(UIta}@99F^ zcXO&}aF&p2T&0h;p_BKzQLC#$aEDe9l^XojIms#jb6?e7rK;YtL=Ns{L5RPsu<=G< zbl@!0tGMTsqe9TAu9aNen&o;vMnek%YN~A->TJJ%dDP}jk)p?_r8k+e&)?i{mJYL|UXGoLNwmAi6|y ztq{Qjcolk@PXB@(i2K`90AjfUfI-B5dhb=iqEo)fq4kN|W%Ykeh}EVJ#%S;sj~0VA zDP`NKvNv(U&t0azWl$7@0#iV(!%DOPPs-Kwon#BJg$u1EC81ntsgF?H4@2am551u z_#~SZl)*)`Cp&_gLof`si4tnQcI!hR(mrWq%V$?%z=51?Ou0ivonh>(J&-eAqYb{I zN>=$DaTKg5)JcpBKBp3+w%s0orl(8~A+{4&<`|}iD|_ojo#C$hg|-C=Dx<-(pFAjL zJ~l}gb|8?Lg{Q;M-UF?k$Ge)~OeS?98kU*-o4pLTsgQ%-@mg$Srf#=l0JHlUXwIKs zZl7tY?-xV#&kDRUU;lHHAba4P>LnbV2AjsyUdO#~%viJGl^W15_?c{U=5d;N9nK7@ z0#fQkyPnS-WF!sndpAX!6m%!n8)Y)Zo3N=Yf1rRp-|@P(HB}%V{MXk}c#G&Bdh2Ts zq#%<3ny%VcUG}^$P~VXC`xv0^8pRO}2Z~49DDe`G{(XqGjfKroHR}HkLm2NDzZnN+ z{#XOyEnvC%i7f6;H;bQ_>jD|ZZdz%H!P`Lx0i%O+2@~OuTrpow66MmNgUtgX$_WbU zb-&G!Dv{OTnWJ=R%p>7c%p)d&2D<{lmnM49A~w#ijU|#`5f8qxCcBD8SmqaP`-!s9 z1~Z|C!^|aK97NR*w5&}+vEZ;S+(O*qRz-oA%zJlD3s zwPxwt$=rWoP!8T)a7qE`H82x+MIIlXPJsYkDc~DI!h=k(2Qgg7%VH$ z*Nzb&Q(;IAC0YR%^p*x4!1}JTv7?smjER0TTth63GEk-m#8yH#B>e)9?Sk)3!2%sPP*)eDb;2 zH#LVqm4Sv_F2ZyQPA5L6QQ{`DL6ze$Sl|$wlqATbRGBahjLzc5* zF%0EdBC-86Hmr!{TN)L{y9yBVAb;iIB2Xl;DxJ2xzF^>j$fW}*&0Q>=3CvytQdT<$ zkH|A5;Sgr{xb;|mlc2fPE+;hUVFaoCza|#tl}8`W$OeNj(k~qICpE8WV{Oyl+hf}~ z)L2xE5MiKJlo0A2(n*Ni3^M3J?AAw~2=h%l^=!b5E4EI)2YbdzjHc1ht{0DH)A^Gc zX7SKwbwX)ZZo=weF`5vl_%HrnAp*#WuNRvYbtkrr=oU7rfM&atYuUHRUdS4#qe!$U z+s6Yz2o<`C?Tk!ivU3M;0*y=1sNwCX>9kRzpKNhOKsT~t1*xbk+Q!8*)`U(pXVk_Q zREYY6L7Ua8^9 zx`|XQeH3jEQ$!mY)bAlnYwfjU*L$tS2CcprWhS|eQuUbg%pV)ZHQ(m6Dhl+|GLMiA zry#Hu%p<`jjOoY!Gl-8NsGk5)7uAmhAM2x-3gPYpfIaiPQOxy+NH%gd3LfFw0BYAZ zf@YM5)8-Yh6gyXiPuw3I0iE%NkjH_sbT~+g`ufw-Y+uaS{%~t~5f z1wff&!ST!X3;yNRRNgFxLB5B(RD8P?gAiv@-xd}07OcVn$-I0tA_WS}6)$a1X4kYs zBw9ikI%$-<@<&@L5#&3xChWGT?H9n;GMzsX%SwLZI2l?JHD}&+=t>CDBVQ!?#$lFx z-q*Apm0Wfk37Z%1vVxOulw08Zh&ED}D}bh)DZvJ!f~_ zT2vrS0qGC()u@w!K=gxoiAd}^+9e>TcAhLgq%@DBuye*JA@3Q}QEB4u1<1oPVSMkl3+-;cj|Bp}i>< zSpy{r$`3KaSVnz#CD0G~pR}${sZJ$WNBLU}g!$wTcmM~aO4>bETVsE73yz)Yyu3Cv zAG0Xdh*Yljyu2S(eec&HwE5Og%3T(vtPBC(0W54#^WW@Q_C}rfjOj* zHO}W_X(bF&xB{@EIRV!Y%wF7d3UDPCsxyjk)Y3`enuysAxO=q{ign$(zbRE2Ey<3t0kmx> zF$>`%o6}zcKL?#NiQ){U0#J&LM+>=fc@I!2!0E@UvG9rp30vH5psk;CkU1}|4daix zon6RPXhUXmO%rCg*$mf(>YSOIRCF^~H6r;cmvf?!jEjvbln!KCafeCY#8&Th(U|(| zvPF0~6(klF+I8PeU>{|+|6WBjAEfUg3--r@fBC@6j)zB^ zvRuCYw_9!Ru0767Iw40HkR6QsJZ@6X7UP-H(Eq2E$?P8E7vt5;LEo3l2P!pJ<@Ua- zA*ML{WQOAuLzCX=ra*SM%*18RcLe(&NJVWn3zNhlWiwI ze3ckAaA^EvNnUUNyEfvoCeST&8kA9bA_lBFrg8gvbx46Hrxi(cP_z8!hR=9Ia%C_< zlencNWon0Vc2(8V0s3SOPn{S*44t87>;29?(FEi26h6?izbG_dU)yV6J8W4na(GZX zRmScB5mH`Yrl%it!`uJ1NyaNV@Ox6pu0cGr(<=sl)b!nTUse?e^7f>mxz`XN1QBq} zo>P2b1OQr{Kj~*J(2tnh(Ok9t$IchWf(W)C4g{mtflmNTlLgRVglC*k_V7|MOdtVi z^clcT8VNhvhVl;~@+OjD5>cyK>T)Sobqk^g>fV88?1HOdD9iH&3J!Gilop^{VvSO~lJyD`QPN@_ zDV~n(GOLBA-TXuYFN5Q+7PyEU+{um|5HX6A7(yQ5PY8K#2=~g_H3(Qs3xkpfSl{Nb z%-kNL;Sub;US4ObR3k&P9&+WtQt3TAh25fc8s9=pr zevsdCXK28N68?a^zGI+VR?xW{@VA*OF_O26RaoUL2&_K`UhyO2zDoCpn))| zC<#iW_K*7Nxjs9%vIbziRuT9&3smWpdcpDf89=iMlU))b5faxzQT^$Z_!wuk6A5Uz zrn!?U4FXO^+p=<|MphvE3r5BMoeLwR7M>F z+MKtzO(UnZv4ZqooPZPSNrgG8`RdWk}x~6pbXezC{IPf4(zmHYebNo;vk=YxCIe^(+n$ z(ky3npd_zviaHZgi0QgTxI09zmWbPE1qf}kUg%FZU$TH9&gK51qL(f02Kka<9I5D% zb0elB%a%an2sJ=Ui3J}>|40+LC;BF{>KhBnJ6s0hMkEi_%sp^9;rsp^lz$qlg77^s zF3=Y85KJb5W6Uh~QB85r0bxj-#Dd3pl_{)nSJ_t;;FeQ^U1wd6z&(M_Mz78z-E*_B zLIkZHTh*(=CyWHt>5kBAnA#o?&%ObJCy#50|vF#oAG-~(Wx>Lih7Q7 z!{lk}41TgI@L?^EhYL^NZRu=*a;0gEP%~3=dG#TunZsA@mBFYBpjMx@J$5Klj(Xr# z*A0QlCVt+Z8~M`XFY4ur52$BvvhD=a`^yVEyn_W_j{zQFLIXrum5KWH1WiRf!;%>>ezlP6IrF;S+*y%2kMtj(8|n<&an?m9 z=hLE^0cC}pGoU+00NVcQjtAhZR${pGOdpTZ%SH>ry3+&ri;Yfh7`vXIc>2;b$%Mg2 zP;vlF^}+v#t%%S`QA;J$)$fyS_$>)o&K~3BshS;uAi&0I^EHPFRHBX&j9R&>tbD1q27c3+?-L8Y}6}UuWdh;n?`A z)np>k7GWSva?ba5ONh-G6q9qJac;8|Nkyj207$=kk*7pGjDrj0a# zx0Q>Q+4AL+^lAXH-07kK*P8=M0y9?KvPD^ zF>4=Swc#0SZYSV2KQ|QU?^XI_$lR@*{P(c0x|NlS=j_}w%j{O%kI5|1WUW#M-gjQ& zi& z(4>WUf}hpYR(Q1o6wsv0U1)RkeHRS)>;7uh;oDRsEBql0Aa(~rk2Si(=yUitriJyb zNOw_QpySRalpmO%@FNgGoL|U|s1ysRltKA<{aFhD9%~dLD?DbWQ0!_vAAImLPgXGB zg-aL3g%aWxFoG|KycHfaaHzLqUV_uEkz-*g*IZ1mNLL371BW=@6!Jn+N->=!v%@0} z)Y?Nf%rbA7RA|ats{8u&ucR>N?8#ww+xn>BWimA|6WH-rcc3oE*P?N*RA-;{zMQ9r zH^F})LQe?9=Y_)%jLgn7E*f;y4w|J*V~3x0Gj#fQsr=1prF{?4G^m$xn7Aq{#~r=t z5`MtW#Z|TVQZI!ntv${pD$4|#U2b8Q|2*LBfT7*2XAve#DbeBd5T~|oP^)&e#a{wt zfYKFndH4F9O5fIzQq(NI@ea9+WOd7C_@LF3A|vrCvp@tp6A5T4_>hGT3c>rh6gC4> z0b^hJuLh%qP$OHB z^7WH0?wpzgjxW_W7WJ+UoJ`*TNN+4H4M2|li$4fo@RAy^XqFcV?0WWbkZ{;d`G2?T z&UWIzJ1#Atnv;^RUCJ|rysZM2%yNA0nl_3FIK5_0salR~s5T_o)jcf3R1M)uU_>vg zzw%ce=kQ*kn)K#|Q4wASk$2p*keJPyo*8BL!#c1@w#NRDs=1Qv`frJxK!YxZhsS_a zRfA#dbQ#rReby4JNI8i(G4sSP&OUwO@D-79@g)7=8AII+tkW>IWoJznVB-H zJ+n{7=B1V%(vG+ocWe|5T;s?wYf|Z`!>%W$h{No)n14KL2Ny zowWUVlYEH_l-5@svqwMQ^3D9@i*3V#PGVTKVY0=o7oXJfy9(3wxt~jS3DO$@4}ZuA zQQmN9@}hhjSb8rhnW(VJzp4gTcIM@8+x~&~EVRldGC7x)aQNbgEZCH30(u{Gm_Li{ z{q&0d7)Qv3Q=!18^H$#__BO;e)<2>N!bM=ldi0pCe1eGPdMXqpGA;~O`@2S?h@!Ls z1CadggY9caBu}{1F^emOKF@#px}&hg)qE)!p6MlwQNxf#y7z)J`KuzN?@Ir^e8><5 zxP$uab-hN_&nBXJ1nhNFKp6l;wQL&OcZQj>!DGu;z5ea{3M~L%9uRcRq9@gf7BfhA zTsAwSXS!uj?JLN=uw}1MvS&0?9(3*-VDw-vuS(t9|JrZZhww?;-qHDT&{39Y>iiS%K?fQ_iGo!fwAfPyTs`{g?^!!k`c=x&V0De@YI$i3hY6 zz%p0A5Ds+~E|~nISp^aWyW-z&S%0&gD$(VbnnajlP_b(HQoLa4@$|pj=?(8C=Y|=- zW)pR?5>Wn^AEwH7QydbWwzR&&+c{z;JejS;KYvSn^jkVF&ERCs?z-^LC*P;*p^Q|G zIwR7qXv_tweq$p@WFfrK>*}J6LB-V2C((>hB3CnjUL4N_-e2-e!#R^Bd%p>1PCj${ z`m1g1?T0Hrh%>w&QQ3Hs4xj`O;}(>nY%CuVF`<$_3#9qADJ&x*iAwyVh)VtmSEpG1 zZy-ka*VjGJzG3GtyoUJXkopBKNYRGxNJlgI#jqNH5=mxaUK+caxm_ts{u)&+Rz55g z{IEgQX=J(uDpz1uejOuYoNc8=np$Xy$0fuMxz4oKV7y3? zP+;&-rLtFnxt&$yHCknhfNV(QX)YY1OfIzj>{P z>uT4om?+b@6y<81C|@u4Ryi##W3!nk;`-!_b*|GQW!gFdRBTf5EAE{^%C-l98wSG4 z20L%D4PUwJZ9<8`d_tafo3ghgv$81wq-<<>M&F^H+-1u5=9iRxJ;y)VhwkuNviA@Y zc|A_>Qem%Wp;A3&n`#&&n^_LL4v>^F?79D8cM!7PUB&cK)k(amL(xA3-g z)BL4FL15?v@dwCSi9$fA?pAy zpBWKrq&hG^WQvvpigi94o!TFw3@`k1aM}laGEq^_Z5BuQ)$nPi7i&S%Up`#lLTNs_ zfzm>DAT&0FC?+y(SUS#?88}wI0r1+&C>G}&td~bc=W-c1t=^w)$m9HQBV9od!#u6> z@sSqerl5$y)XK>$v)Fg~5K`QCcHMp@Tm~9P=TbW+gvkuhl+BlK+9{40N6nY48;$Cs zNRS&0nWfb0-Mm$eiYbGoNAnEhIwx@+Hleq6p5`Me%nJu)>>g*fUFu0uzDgU+C?=diyVpA-i2dwT`8zOB{-2h1lUh`hQ#8 zd7>V*nE(=~HG>4J=&n*`5x}4U$RoRS%_?2rhaFjU>IJ228A##;4s^O)m!*IAb63Ba z@!CoaPijg^baGy=_<>;MlDD?Ki=_RDn_<*eqch&Y*3Dk|G-m%7D2&rC4A!!AZrv;q zA;4@m1-L{lA6M2W znMG50)Tbn)}o;_)?)@&fNaCRTtpqUaVH5y1(5L{Fktah$tkpFYo4Xftq%m`FNOSQmb@)MadX)E-JY$jnaKi^{O_Ofuzx zATM6dylXIwIxq8m(3L5FtNgrtwiLvXDe@yGxt=I9JG*e+QOf}^>t#&6>7#e$o+X#R zVp3|EOe;W~Qx1Ya?(7QQtqXWh4CLjtm#d~1hw0x+yT?-Mhby>Pb>b$@L%d+~73cWF`JX-o zBX_6Rs+dl64;q%)+RFYv6ZU;Wy>azhu1irq3RJl;dm6#u$-Ys6zT5-P&a5949cL^?bg(r4 z_|o&TZt(zCxxaWIqYZ#Z&fX+^ZEm27d~XE_6u23Q8&MarD*E1EC$+i4>Ez>{(2p9})nD)IGe3;kxjQ-G z8Y-w76^vv{PPTd7u<@^3w5^n!jd$}M2u%AyUs`ArwfVpa`tc6eGF+-oizyrRv&|Ts zg?xZ554xKmk3Y;VO0ub_7i+9F028X7?fBJrX>9HJRpZEOX0je#bHoaNiE z&78CEeQ^~(y=yXfQy+6%N~4CfrOCLEqxtKP!rz-f)-tX7y!H?jmp!&)FI+W3KN9qH z(ip3Fd;95cht09)_i8bt;&DZ`S%ug=)UW8Fl5AgvV?VeT^t#_@#diB?@A!Kl-#@fP z@O-#K8O3{tkh^#oD%je(fqGw&)feC*H6lL#GfSjxeQ*6di|d{p`&aKy;j!-`u?^z0 zLdURjc*MtR!OQN$J_Yj`=PH1Dq7YwyoN+m-1 zI5Gbs)^Fsrd0H`cQw~3BDvLTL^i+-8LE-Rytqrz~a}45z^jGg8g{hp=@=H#(OEcqN z%YZWRR9Hi7w`fP5lwgFw*eh|S2M4i!2U7)pM=-;=H6i4n4~?yE6`kdfFIPn ztaO|;+8q~5PXit&F%0<7kmHydQdQoIMPBgpk$o*{xnOxKI-YJdU?YGBrjqSFN-zge z>HWSjrmkGuX8UDQrxc%oV+%bl67ZW0;?GabkN%=r^vFZC-qf0|Z%x==BfpYijPl*u zL5|;FQKOk6AR~NfT=jCQhBl=|P#HfGGZiyR&OgWSH!uw?TS2=xD4JsZ0VM#> z_-Oh!LTqVHERS;geDEY&3F6v`HnRF6bG|@jENXproMeJf?EM|Lb2LBVfsy9>&!p)l zgcIx(l4sQoC4|LkG`G550*%ITesS|r)v#d)0QJ&Hxt%DIPpTA)CzwV>%@QrhymxT^ zi*Le9ojYn?Tu|M(E-oC&E`3s2duD+eE@FN(C4!NtT*Fl`tqxR72Kd5}I?w7?4)(B2 zj&O9}7A0BvCBK?xYSd0%=|`#)XU7@jtZ0N)G>B1UrWM{#kb@SSKr;)*8LbK}Kb{u8 zn9?*dzJ~aBeg3}GfEf@u60VkeX6EnTqIl0L>*V}#W~X7kg>pSUABW+RtT6}4ERVFC zbLVmh@i-c}(v1uaJ((t6ar$(I#ar9&O>nO^J$5yE6zbxtor#dvJf3?(7z{Pga)%=; z=GUnVm1kp}ZVngPFS%FgR_V@y3C{og4S?A7`k+)<+_DkXJ(skR3*VBS73*ad8{3Ya1Tz4kjc?4 zyqLDd4E16S7uda_@{{0Q1{oQTWOW}nnxtDb{);s0nDYLmtTB^nc$Z-_V>I^uI`X|H1;DnL5xO}@8-sf)L z9ao`UZ>lp_M`oI|ckV{1u=|!!W{xfU5eHQ$gesDszgCt%96{a7@l<$Xkc1Cbgon~8 zqnDj(g}LJDpHKIwleHK`m|qR*TSs&#Q1Y4%D$QFZTdkWHnI)$0uTLuzyhEHEHhpuG zfaCPU@ZhUrLEl3f*27`FO;qI7PE}44FPEGx&;n|J=Nls8X0+G?xL6tqwarv&mj0h~Xf*Uem+R<#6O2W)2LTLM6LV#*ugHznKs*#^U1>^|#JRzEoULzdruRo13(&YmKQ{zIT8*dnfr# zml#BW{z*%I5gE886RPf11rR?(sgDOuOEc)qkOe4`aqgaluPFkj+gf~5c6IyzRT|J~ z8aD>IK}KNDxy-&BlvjKEB?kMPS=C4!4=9;++vB7oN7C_dq7;<9964kLMh3bR9KU@6 zjCd_d<+Orz{7&Adx=;fe{Cx!k}n;>PT1FJ&?{o4HwpM>Im-c2hTLl(y`>q=jJ2Ng#M6&X z6OaK}WxU?N93*2oC)3TaTEuUTqjVrIqd%Zza?(707cc`EAz$e-R8~!bL$W6Fk%}B> zmzKweKtg@q6iPr3A3w&wr!k)OuORFDh68rfK{nMoD{p2#dB1U+YjSTrscIIn81+t} zW;r_(8Hp(GHvI5=rqp>tFO2X-ERTKprE9z64`bAa*zV-*vFpd*tquK8${A0vVRxA5 za8ns4u=R`?UO|^VCHnfq(~7@t;s5DT#lLW>w{D?{7TLBZNFzz zU5@9sxAoikFowlm$$y>-(L`I{rvXlabiRzSy5Qc2`Fk#)0i{zev}sS$gz`~z{r~&j z_AW|Wl|Gx$((KB(v?W!POgZ`{%H9JE9}e9AUiemuFpR*~`>mLP`m_Ew@o}#2E(PkD z*8VWwra1~--S3J)!mZSD(x-B@%8PXB{Rc{c&I9ZLg)VxD+Yd`dI9E@vgjbzbxehH5 zYFvxF{kXSDT0j%b3bOQ*i@#o;L;F(Zs{%I}PN=FoXl4It)x1eEwTmz2XR9*4K~y`| za3pQUp0o)OQheLz~CHofS(>YU2)p6pth?MrSnNg z-+Lfd0Iu&Rk481O-!tG-=0$sux-pv1f^}zt-0Gm6-LL zz9W7>sGpPwCG3&ME$Uag`Z?KeTg<)^aL?_q=LD+F6u|jh^cjlXukZ!Mtw9Tkr$Fe^ z_Z>+bh9pMprE`77Xx;eHfJQIH9Yw?~dl-U1`wzflMH#T zlRKYIg-SxTp#H)4D27h9N}5&W+&s~Xq~0!rUAHC7&baN)|B(Htk6z|yvFCdIYYYuW zdq7&;`9qN=nTZ)k50#lX_wtqINKsm1-{?&w%_(ThA!!7pBZPEk-aj`qH@l8J-6$&7XXr~`nqL!{f&58#{j+Akzi0#g zlDvnY`-WJf+B-+LCXgPBV!I6$#LNZ7^1MA4cG*rteRz8J#D^?m&GE-mWMBaD$pz*M zuEke)ctEdJ@f=-x{52n zttv_#Qm-%Zko)H4okh>r2_dJKZgNK_|0GmzH1WZ&Uq z_r{?R^{%h?!jjn7QghuC@mu)WP(6?Z?MDiZclfY-xC?MXsz@4RdMylQ6G>x6!-1gS z9Qkp(^@_9@7ZXBLLroB8-v4c1h|O43zG|11N6ixJhyONvKhM%vJsmxtjbYHO<}*LP z)bD@ywR-euQg>IJ`ud?X_>bc~>Uc%(qK5cQ`uBl@RPP_nftfPM`b^zub@2Z(r zPjGp$gXM)u>lhbtYe*X0iz0lfFS?(lG=23`j8$YAdu6;_hgH{stOo!PXOn1&eNbG` zA$#D--)d5*lQh}!3&2C)szl0Cy4f8DJd7wX!W;FYM^;A)#%YVM+~KP|upkB6<%zN! z?}=L6CjPf_dIc3$OLBv8OkqK(Zt1%#=H2=*e5t!cM~H&$%=FV)_37t&s>HGG+KWrZ z3ZW%2Y;Dz%AHcVoCD4Y{rzSrDqGH}ImrxBYoD>7zX-yx9V<-$K6D=MXgn7?a(Tbnt z!j-Y|jQCwl4D7HmM~6YI*!~-i$>pFGZr0JhDG!QGXqD!wPiUDSPY>DC3?QChe~c%} znRn3l2fIeKR2OX#XDqu3GpoxlX*YVnH^8d!KSh=-WaHQkl%pHu0~v9{nXKI`BZYIs z2Y$}81DGCXo~qO9c~zil1x${zY>HI!xta3U$B>ehjT2p!IL1DH*5TvXdi^YXH3$_L z2>T>rt>V(F;Ex7={wj>iJ{UIYO$lf5{}J?Zg|;$7W?MS7)DZ6cRuBpdZ6bCtJMdeC z!~)7~1bs}T*td=i)C+5U{93Fc2+OwbBKJt#<`Y{xBf*za3;l1g@3@V-ej;Aj51Vq6)av$QJ(KuXczbBmdNTDN?@Sc6-c6PJhc zaQU|Wr>Ew}MT1ow0m&0RwoE_5CS3{EUI-$d&FK4Y=^Ef|ol>b%>xRJTaV$tqJ}3R` zc=8wE1BfSqDNKfS_%%FJF_VCZP~qidLBZXAul7{v%H5%)q3WOvU?+C#If!j2zn9G4 zqvpmf#CITNE0MKOA1sy4TjP4bHt6$llOdd#8^ig&u@{hjZgA_SD9R zU2fQ!k?rn6;Fu#l@md5sTCg=G$R*TY2bcH?79rQ?8!<@vzQ(<57;6%`92NAa)TG2(Pt>Hztfc0C; zQNlg$KM`#Y^2YK(jI0-5l^0Men+K)Ik@X#6#3QrDz$R@kzNOJX^s1O_Ip)?X`@P5p z!BfPS%-91avTAN*C+NM1y&isCFgCzCw0fkeJ*BTP+c(r;NNu9_fa;ORs-P$3xAXHq zNzXhQD-Ua?~j!Djl`RtvmHT&#Z zU|Q0nv3Izj=rX2@f9GzQa0+u}fBeQ^lMj2c4Wlhi4x9u3R_qjqHHG9&HT=|_N+kLN zm=#>U(LNP}E)Y~h8@QsL&u%TPkT+8`-XOg96OmiO6?n90wFh!~AKJrA(Go5IccMbc z+@t1B(4&4`uh;zXs99gkG3eX@5dZ-115>?REIB*XjwqdVsGE%S1{jlEmLEQ!Q=Wa^ zHcwYsZi(>dCpSz?SwI1o0_+ruVg%lqYP;5;}`h&u|wX6h#Rxl38$UchF zS*8G4xlrR-CUZ+nxOsCV#Xx2LRz80T^)8aV$m!QeqjiRxht7mwfyVlJP=MI;Zn9qIB4QKEE1_fF5|Tr{ z1zPc^HW}QqvQ4yPgM(~Mf>H6s2Ln-K;k}c#PqIhHJ$`j6tu;AZUBQ4G-v2R&kYR;w zLVv>tNb%3+Z$Rdvkwu{Er&(Rizuw_90T=3g(s-f0T}WD!U-G=`;}cuuq&K&}e_1mXCA$RnzIM(F2V8T^dIunRfkHeN2Kw9+J#;b=J`}kP!=EsLsTwk@%im zR5$r`%#lxQYNIzPg4{u<8SI|zfWv9r@^Wfd3SvvtwyAG&#iY9jkUB^K52sgg?=(EBV_ zIc}%c62k?63k4)072fT@j;%92p1b&Tdg{B@3E1wWn%|b-;np+;y0fTX(8Mj>zvL0o zM6n~NQL`5Kv4pB?Nb_o6wn&z{Q^Vlo?sVI&>ZphB1qN6CJ0o&S&QVn!6g^FMSC#X# zH=!iN6GnyDLz_AW9yq<*0{pGT1Ss?}#Yxpv3sXto#;voq)v1{Lc3+eO0AI7FZrbJR zFryXY4|z}f6mv-(Zgg66@UXjwQG*qnv_^AdEX`!eeyd+vPd9{9p_~3DSTq|){{&1L zmo(;uiL!*Ih6n=zxB#}z@al_2P`WH^nvpG5zoGY@9DRKv8v+=JlVTl_wXY!ePdyfJQ9cPg*PrWev0%8 zA3@{7d9~Fyp4^!xg|b}ZYtccWmeUpXj4eYpV?A}|R4>V@r+OIMh>ZjA?lTdOkqav%v~1FhCuK0P8jzzmL-9Q9N4|d z$jzs|n_nw7|5n9l?8XSyKIBtJEx=Ea4g?sB6(rSOCx#U#&@#naJls}23@tY5)d^DA zljb#@^3S2Z)?#x8hRHas=b)(Prd-)XH{Rp6w}yNOqXl^MX!Go}s`7BK+jD9lFFx`3 z{1ZJEYbo*M^`m~*o|=2GD}c?F4Y24RD^YzDm6+($pEOIjWVa)K-_}?5|NbNEz;-MY|D^j9U`!^vXo$mN zVlIb?N1Zg$;eF$ORh+};n-4E;ei(3R$i;V~46=PDERb20z<&0%KOF-1wK_8{zxu{} z=vd%T&}AGUUhH7<9s5r*?Mj|~8Go%535j;@Cq#;6fjV+MGEXsUE$>Nj0!{AuWa{;HiJ zSMuh0qtyHir9%JSXfDvwza!CUw05IGB%;Y>Rd7LkjEp^PdNhxyAf00&uK9gs3i+QY zjhbgkJ+9VX(zQEGF#Ivy5i?CSD?~L_10-r?H-Fkt-n8=SeWRP-1mAOEmFa!K?yNYc z&FUcIfV&sdzD0&7`dQ+|Z@7zf1Yuk+#X2(cu+5)%1o)za&*Wm))W_kqv^bw=jC^D`BB=E0p$t))uXu18ooW zjeu%nC8r|iuv!S8B1zaSyV$7NCrCwSmQ2-}dO=Fl3UY8akZ-eY=y|-7G$sVnZ&pbJ zbj#A_@2AF;k7)DC$wnU?jQNioA8i^ z5~nU7nYKn)x@*>s-$S$oN0NbbTkiyQNNafd`iz!{b2f+L?A8cr^J(?z318T@muM}7 zRQA;?%uw|d!c!Sy1pxqaLA9)Ot0YQ0`sPPV!wB3jqCVNv)|*Z_HycPtr}j!lQaSOG zX^Qa3^;5Hs`-ZshEOya&+`R;GG44Fy)M{9}XHh`jn>II)qu+BWMFE?kkbyBr8bET> z*q2WLN>;&upy1C_<3fMwC<@4xs{Sk^SLUwk0JjNsKjO~uf6FqK{Mu%W7*oUkHzhx8 znZcv}52vlzXX%2{3gBkiKYS+e>t*Z{QLns|q^7CMk# z4)zau)zEuXq`y^5^LviVk+Rmnx1U0)dU@|jY|mEw(}+jPE6U!lt+(>Fv0^mYh(qdcWQ)h95UChLHt;Ss2F}Lovw`PZ&V&4CVtuwYT?Za-# zk2!8`Vbha>HA=du*@{)j-UYeqE}{72)un*D5f3NIu(rNng4${V6g}*JKMW4-%i`ua z{UTo#nSPfCd_rAI{%4)xEUZUot?sm%g@P?R4;wn19~uvcqRz(=8y)`Ji-h0bV`*D+ zu(Jo_OI|LFO017NBQz!Yc2mbEruUw52mYBDo#E{iU1MLCc3Vn9tM14?Rults-2@ka zf`ViAead(fi^o6VSQG4*`FZ_79zs0W*n5wO{(mf8by$<_ z+onMpnRF`3Xb?ts>Z`zzZUKSOjFv`98by#0+?diKAZ#>9DLJGWjR=AxM7q8Qf1k(k z{-MYF$MZb9?<>yhJkJZBirgn5AB7LA`GwX|ac)Ur4>49vX?YD#ChPr5)JNC8Yvazh zN>1?XpycM4U%Z*U`w$1ivXqxspkoCo<4uVHWR+{la`pu_F~@R^3@8&XQsBy5A6T6oWp(idJ`Jq{V*Icd#X z2qBfC&V0Kj-cT#gNw*uu4h~0uOFaB4nt@j>t71YAfO%?@U-(Qx%{*VZmbH>fk!Gdk z3>6?0Ng%B~4CYK`Hf}Ww+v2nCe~zk^^m9qW&xZS+Q9Vj$${DvHBKf#^d;I~Ip(?J~ z7{tVm%KZ{X?O|BloW)v}MBK#gS3G^binzbqlG-ruxbJ-AlT>z5=}v5|jtkUJa&0xz zSl_>5f^;dR?EC@|@ER+QsVYOJi+< zkrCwQ{7cXOTJ$u$x9*_Bx(x=`v?MiHd$LJO)_ME`szW#+Qjtd-yVSXD9j32xW>B*! zdf!81tIXbQ;WvTqROxl?a;3YJ0J+;y;m_CbvLzgBuSEisTaLociBA|6JAN7-3`q4k z`@|lrm|DnV#p<(#An3hmtm@f_vDQ>e-YOydpkO8wufgg>C;Wr(qF8nAOTVDuD(ZYl zNI#>Sq5W#VufnRSh`$d$wZb!ZPcYg?rsPGhWAvPOp!5bUa{rCN-XV+e9k1u^{?)1v zl5eJPe$KZR_8jnl{Z~IP(&e*dy=5vo;}Fr~q(7-FrO+i7g@#JL>+;6o#82g93?hRl zk4>e*>VP}l@RP9&xb?ER9S@CK!-(30r0e>|G&^S{VW(?CF!~Ww;ap(o2G(#}d+OHs zM#Os+d@daeP)NbpT4wxefI;k9Z&DgiTD;9BcgwQWu}j$&FcCvG6nZMa-#W$fK71p#~jxrN7roAo_C zuO6*P>o=SIPM(0iy_Md#M}IQo(vh7oR+?i%6{GjlJ%xm!f}_*_wD*qTgU zvr7Y8p+GmKGMThSHu1UC`%2X+E)U`nG9Ayhd?`86gQxAnE1pHZH?aP3;I?G1KlK&h zCNTa>%xMl}vay0_{*V??0Pp)vYC}4V{AI{_JuDvr?a%jKr({(-v<8eDl9U=9h)l=v zv6)TBzwm}me#_4BXuZ!N6Y};bvoj4M_0d(Xe$#62P{hxm-*`zKuCg{v);JsoWUUyS zznzO-7P_?On#nW9h@zHZR}B2kb5_)Q!tEyFY15+p5-0zqWP(>9cjd(@Jd8(2%?_YB zYF8UBkX#bG#^I)b)MBHMn0jkqwJ`$V8!P~<=9z}oYamdmOhO7jX15()I6wFsm|G$6 zH^xhRE3ZdUPB?R7h~N-37T14>E?wE%v(G7Xjbs<_99a4`omEv2+&_V?raLfkKe49c zXZ09sAy4MfzmaP=nWQr+Ycy5Q>eMbl8J?c9hxCtPdfZD{T7Wv%JkR^k-bNOlO~2HB z^;2xn7DL7xKT1((&vGvjhg8FEgjygA37)O8lFcQ zz?`Pf^d6vSX6Mi}-5;l#s0rAxkT*i2YYjY8%M7*!bDg%>auYwfr{OR^@~%E+d!&F9 z`(-wsvCg>C8X(NeCFk6C`+wchH0X}FI#8Hv@}tQzLCnPP#aR$Ne8Q=9e5)$QqhQ+! zb477ZL)$fzpNfpz=iscq;KH^nUO)Ul`q?44H*!643aarAz!9Y5^ad5v$fk!;YSO@o zA&11Ndq^7LJq>#J;BRrx?LHsUSWcxy)PNotcy~ z^K*vooceeKm?Upkx+k)e7ez&owP_Q|0gn*%ZwjiEXbyVv{D%HpSEsx?>d{^*BvlA) zO1eUz!$oH+ST1h%eAnbfE5U4Q>0;&j`wo#w^7oQP82sm(E`|nwH?x5sD{4$|y$ziI zxe;_hBp=XDIH%6sV5M#7ZLQPUs5kXQ`l};GYnUwENp-?bgMaAjzG?w!T>PeD$X@_e zTu0ZlO;ru6wUWW9@kZQcZBGzU#*$st<^JehlUq4KAPf*S*b3uxzLgWc!c`eGt@_P9ciPD zkh&d4q(s3~q%>uBeWX`N|hUQ*wjz^Zn=T^Cd+%VDAa>k*- zfY&iVwQzI-jP29U&DE(*R?Teo!S5ZG!)5Rug7edrCWQdE=l6Gk~y4;-@qr8Zgi|DL)RD!yj! zR}Xx4Cw3je_>2v{K^iHZ>vN8y{#3pdz)bl?7nyWF;1=4E-Rh)el&hkACJRgzW5xH3 z7(va=&(6iI5nXvU8Y?Da;A<85$m)3raqPP1EwoJHdhS8JDk8(N+dxz4AqDTJhJ`|d zN5{)K4%b)jY~sCnJDjSPBQ6hHaTHuX~-~rKdXAUGnl=W`ZdPvwJVniaLMbKbpuc6Iu?=8j2V>t z3$_Rcso2dOY|Zrv?)W!if=e0Y;rjqx;vY*xsf0z>(4R%u>-%q@{+gk^PpTMOWSmP- zb>Qa#bY*HD?p{ezc7DRoNn$yh*q2ffOO`XBw}^cvNSgw_VCInNZ#y{gYm#CNZrPpu zAvW?-lt(110^@<4B3?Ieo6{P%@FA2Xw<4DhML!>oP;OW&#OZoPahQ1pVs4qRu)F-} z|8^%vaku%0#?R`x4;lu(*+ul%3|_hqaZbJ`cXyfOy}S-TaA>DQZvo3K=r&jefXw~$ z`dd2D6~?j2(IPXxqpksLoLwCB!3vlXFvT$kEGk93BzvAncj|(U0uAds@PZ2kzk3pM z4?Y&&0w+#&iWn^xU;X-$z|q{tz#YFSg6WG zgx8BdFnQc+vf6!V9v5+bAI)TnY5UYYGa!Qr|J77v;31um3we3l>uBh=XKu%%jtEV> zxBlMzq;XxJfppIW3F(S_$61Gkm}x)oLGAwc==LnK2}S?q+Dg!BKLc^l%nZh7mdWaaA<*;_lBTkAabv1EK6z#Xv8+EHG95W;uY!sHypt^h__AXq{Cp1| zXRXm{Wg7>eb`K=RIi`MDcovd1KI%Ysm@l!9-SQzOYOCc?g`2)c9U@tZPpV~|a+ zwYIhpyDr>(KOmo(y4ZFsmLohT9|y_Mg~p}j13!xD|Gybg>!)x+8gC#J*0TV0Qlssy zr0NG!l3V#?uA#Vz`p1QF9CzWJ8a1WZ2YDx{4qt8 zaG=&Z^SAe{T1R<7y`q+@RS54n|8YUI<^)$D3X`v6Sf1;VxN&&J1DN{=qf8#bx+R7z z2F)rvzm8r|%WR(eX6>)>FVbh3*o9JW))eXcgNFyDszRubC3bz6RqYeWy$$fe~G$$H)hJ81v=5@*Gw;ul4RCOmKQ1|oYE=>8`k7Le}5x2QgWBmwO(H52*0v;wE`&w zuO!j6#{}Kd)_J*^5YCID78PeVhw?>rt}~ee~P7OkjLHlGIP} z(@P?sleiH{s^2mT)R1^puEN!J7Z^PQt_dT_$Lk?qQ9?F~@zC#U{(^JfXz zgdeDl*n%TYr%55h4pzYIaAYGU3-|;DrS>_Rycm}<6AY^q&nIrqJKJJhGIct}aqKHB zn-KMa;zgU5fYsK$QL5(RKC#CsDGSLfVA~rWwV|sRP6<~p7J;l<$d-bBXh(gCe^?dS zgsScI?%bb6PQfgvJ+q_z+hxCA4K+MT*$iy7B)euAjUWi;-N5vLH1&NVh^RlYE0_I~ z6}5P31_P4kUw?gw3ZUqQcSDuL$4lxW0utN9wv1OOl+TtPtu1P^VPPPkoxw%j{u{jY ze95^Z4XgE^No-veG*`Um&O8Z}bQI~=!7pFrukOP1ShyVCt z0Fj3;9g+zUBVfD>gY@KNvBFG}AvX(IUQ>J*_7JPI3fhSl3zt+hx*BRfTlRgQCe7}W z`!fb0xBIG7Xj1C%!7Pe%>{&&Xab0?Z=F)C&Jkp!75@v(>z(ni$TDwBjmpX@yP=~-~ zljMe5hA_k@E15c*htRHJDes#!AJC&qL9B0@Uy_ZA0WqUG@hC^hfH%heKXde=d3S2HP*Hw5D?kHbwG1L2a7`r8?!wslwy5LRBnPL%uaFTx^(@^fAhYSOyFKBg-Zxmzp~U+$NCDOxwC}{OFWyntF87 zM#$pkvOJJI!^F6SfgE~Niee6M)WVE>&M_D3fniT~A#%2s%0{ zr2o^lf{zCCt@9+!I3?Yo8PhV*<`4-mF&VkK)aMSvmQ1yu<4g;jLO(nNk(x~5KB$fT z^uI+$gKS^B|KSu&19#-{B=Vq(JND$MI-h&EHzy%=ETaz5@;UM9Ga`;33zbo|Y-^{U zo-DBm$s$g_({naZ)U*xt1aN5o!!45#dIsY{-*N-99Ma?ttxy2}r|POe{AkTiz;_Zo z!gfuM5Z{esprNf0!~Y<@2LJ}`5`LLua48mhr%5-B67wGf@}+-2==tR205cKr(@+wc z5)MsWZ+`5zGX_w&5V2s_F~^IUNeVz`oxtm=$p@b^x6u#3z#Z{)EVdp}J9Oy+Y6>s^ z?GpQ>aliW17thlERx_j5j7t2=B5|#JMuvv>jBcb^ml4pK$sVh>bw&+$OvCR&8t)LGXDr0~0`_(Ov z_c6fPcWAu@i+g!dH`a3S^U-IGrQgoZ<#ZH;wT}}vWG6j>(!bx4WLFJ|WR5~7;_$Po zhdfzPBawlT=p?jQVG+jh^T>jr0OgN)O=Js$U(^g70NyL{R2%E){NF?in#`o3DMiI$ z(@EYyec2GB@016eIaVE09hF!zw!y*EPATIchlEO{8Am7SmvPvKTP~oRtXd)f74e04 zhylS8#iGZ6M4in`)JxfiJW{3W0A)9G7C38XE*v`7Fq5Q&JW<7{p5gb3?Ek6-seYZQ=WJCel_5PQ{q`>Jd&`U;oG-7`JnQlu_=&ODJ72C!6SKs#S#v8qo`9MP zDK7+6)hcW;{}4mU6+UZ^`$Ys?(gO0=vZ#XY-+4JpI%4_D zfB;swvcebc8P#Y>^=ScM^`!K28Y7(=Djy^0=k!P4lqx`|(aA41Y=I5YB8%T~;wGuX zx}vv^+R26s)2B06@RCL;TkLtS$qkZ+`CEuuqEe%V3CsUcl=u|QQm zsZta*227D1uam)c;ETLop29n@~=+s?mGCX zjp=|3J&I zxB5Q;)S|T;?B_$$I(@iQl5>z$+xmyEiS4iJHD#zmW!xa$;id=wz|Rk18$sKA-XQCo zHmX>S!HPvvDSuZEHBcnmOuyjOYG6c^>`EnbfxSECp~yo3=o;OArixKIScsgJ{gm_P zm{~Qs5N|`=I?1UqlWOkHf1jp72hz)<>SreTkC^Y+_LMO;Du`wQ)< z(a#?1iEBiZ-PT%2Ol(z;h+u&J+C9ag``?B66CBtM*iag}z1nfpO2`)_SEIi^1+Crt zJp141gj=riE&cbd4Kz|v)O2~r)`sG=ULI{*ti_}&JdqxN2HCU>i@3V*nNCiK z)rM7Tfb=@xIsVL0nj_`b$h-@&fD^GOn3I7&ouq{HPbTE@SKvFEGs70n^<;!(H8{AZky)C;a-{&9@-%gS;&%0v-V zj;J!pf?(D<%kR~05{RgZrLgnp)aI|1p}`8Te?@X&27>XV&dBg^8?kf zgB1xcSk~^R5;5~biRUChak%(~OwSVtyC3q{7NmwEdr0CYGV4oqeu<|uxAxlm{;dmG z!}g?l3NW^n8kwi{3v{#*Umdkr@Auv#2_90^nxK|>cq^SfQlFjK@w zW8*~{FNfIzZGYqs_bCTAFeosqOljM`W)RhRad(^p9b>^T^zvn5EgIlC{(2^|5)dE2 z?`Z$|8~eyRK9b|U#g>8ZYg?b1XhFJg4PeuoE6c%UhdWkt<94wOv?JJ5f6B?N9(%d# zwnW$A6&azy`$sJk#Z=D@OFXy>O1D%UiUwirwCjB=m_KX`< z-6Zt0UjQx!H44#3?Yg!5M#HIrF&RmQaj+g>0AaF`xwF;OCfPFqHwg{kl}}!)F4$l6 zb3~B5=39<0PP;EB{Ww=+VfY)%@BRd3W4#FfXh3lqBe**$yijF8y4sKCA8iP}NxB)A zgkuHSFBs2p_f&VG^Xxvi7m(>87m>H5)^HF|y27Jd*$Pyj(czHF_oPI;bU%LlK%I zynAET)RXzG0e0sm<;8{4?jyfs@e(J4jAcdFm;YLc)3|GlBS6LhmY7Bih5>myt#@>3 zSy=wnk9(w&IK4PbT>=cmnV0`#7})c{@lG7a+F!auL@5t=m$?CJEbq@%FhY~kb0g=- zK7W(%`6J%%V!}Uq81?~^uQsL&cW7a*j1d zA&Km3HS#d~V-+s`A|Jp_5^t+VDvkiQcfxT5qZHKz@{e;JTNLCq-RgUSv+6J{>J3e_ zaOxp4J_-7k5b>=DhmL(%(|E@3mZ{*a4$>v1C6DpirujD>a5T0}iQGm@*KLTaY6?|` z@?{i533#e#boQPva0Bp710?i&H$Y2rdhMF--%{*m?-bz0XoM@%^1EA@GZP@5kh_#x zsGYM4rbaVc%PlB5mKAG4a5oC=`iTlGs1yr0Yi3JvyHN{R{cD;(Dsh@S+tT7VN;FBnc(k-dD_dp(O`m_mt^0ni58#e z)&$cYlj+`dR>-a$W#A>5b?N;IH4K2V>rhe3wf~~qmF;?(IzI*N{Nh`(yyNRP2asqc z4WluJzzAhXCT>=nwysWaX2|_ha$yvztHbm14HZ@d$}+9*Hzl#@KCFhf&uGO zz)7JP*j~lEJDya0JVRHoyt~c13IF0+-eb{BOme%J>(p3vh<}Uj_`KHGlgPS4I`)P4 z*(lEm-(tRKNVY}*ND|n9xuAqNR0G_g%$3Qp@@-YuBq~4( z3cz-#EO7<7p=s}o$!*#p?fi;~<+*idyD;6e*A^+@R0_whvxBD(V{CTv)c~-gMzYU4 z9^3O&43R!v4115^T!Yz0aN-A&1oibKvUTAZ9Z5#E8P{ig(pO>cDS(4)dr{LgZTImH z4pl^?ATpkjdke+o&=k3h6L_=4E~O$%5l6Rngo;h_h+Y>|Aaf3E2)-uB3)np;l@}<+$ zXQW&&yl%$cJ|rALh<9+fzG@_SCzjS-QBggnXXyIyiy?Wy z*zrvHc{}fV-pH_e10|{pyX&G{rwm~H-eMrM!hzxxAQFx3xefYzB}p0SWm?{$pqiNb z^v;qC*$zhs$?i>glM@!sVqmIy@aFpE8w_Y#gL3TF+jgbvIV~Y^SeTvj#aL<{V!j=6jQlio3!XR zn{rF{TN9pRa-O7fiZV4oz>4~|zCT)PYmCm(v@CUlq5VD3&OLB9pa$^l_U zs>XXY=CjuL@POw#Cf^1J1OBHbM?Lg|oII;G?FOV-Y%tXw0=98LzGT{La9sKB^(6(R z(3_}Of$?d{l#u*Eca&6groY*a_s@@p=R=m&wSmDe6bF8N5HQbT?O^_7$t&hbx&^0dU6^g%0Lj%*6{-^2%8oBEgRsI`(lkbBspPeRg zw+}{HX8^-C1w8iQK8`o;>xB0`&Zli=+aIHdjO%*vRV(fVIS-=e<+`BGD5bIU;`dkS zSNwGE&VE;@!}CEaB%2RMS(vvnVwSw$%}kadr{eTc1k-AY0hXJzJw339LtdQ1Q;5z4 z$h4s=AK{w9PLcuJT&x3Q+Vdl9fV;gO3IzyV^S#iq*TvjYb!rSqMv=M=&6%Nvs?;33 zx9+&r^A~~yfdn+(ztuZmlfg~KLC@CtXEDa zc$X(bTu<0BFTXqi;`5gELMqB(OTw?hx*>ZQ(J{AO)i)=)$lZ&r>Em-PykPL=tnalZ z2V96zzl_&I>Jl3=YZd9$do9X!xt=ao-MCz4uHH*~_@yze?ZwGmnDjUkbDuGVDA7o( zN5e-a=*E^72v&6z;D4$Y2o}}pJa7Nhs$t@2Xq8&TadA|_82~N%%&pTtVrl@rvbrYD z4hG!6E?O#ZENq|Vhn`ydKXX#RiBopt)uR=jUzhy>ukTUPz8S;fb)s2D2u4ul=SR!; zWFd^kqwMn@BT`w1C8~=24#W3~rXBmn+f-k+>^`UJl zV#?AY3vHGW&>4?)Ph{t)U{-Si7I7}+dRwU2VBS`^xtR-RtcY&bs|t!o$d=)qZ{i#_h0voTO-3afqAh(^ymXSjBHei8=J8tj+(|#ZGtXRGN?CeM>0x1 znxW|vinfIq(AIvGo)O&Tny49PXrrd>T$^f`Cs3HCe|w+`)~tr!8wuIRj=XDGWG21S!pa9{JpG2K=_?{v;NstLC(yb zvp}WyntPoG0nU&Z#Q_a2Ejkr_SDM)Ap9U08ZJ3C5RjWo_H>7r{+<0$Ijjo{JWeP3j zoHg0x_MTkb%5!$hP4yZ*^Qp7#1I!q!WjVF{u;Js92M508D7D##Wva(&U_I@u-_#Fd6W1J$lOxMjk>&>=4q!+mg>bj=$8MBv0!=3b>Bp;^rVM$GzLz<+c zk<>k;Wexy2w9T!#A#I2-f~W|};>nSJ#u2km!)Ubr_~*ai8vIX1v?ZNv^Kt~iI1UT} z5f3M{m&;v-em`W_iaymzT=Ryvzf<3ST5~-84ZvRse#l95J9G`zjA}c86HrR#S!=v8 zigZYYlxV%GwE-RJ-$rP=IQwgDCt&{Y-jIkG-5FVLncYBSt z35lC9$!qL!Y&$*_v<*KIv2(eV>(Al|sLBA^4Bsr1iWX#|etuClSGhi6m~gnTW4gzt zYWyB0P<@ZU-YX@xUG4#YCuY-XUmPKNk942{m;oaHwD11x+G4khca^^klIbwgGz}r} z0CKTfg1U$C!TC_=?(g~4ywfywlEHTPe0ge>@8J}^bjbICfp_H2A4T36J~}yG(3)bJ zDONJkW?!k_S)dEp_JE^F^A`)Oi_9(gnKWWbme^eEXsybN`Lk%HMdMEe4mFnU9WvA< z#LZj0y>&EjAoAW;?|`joJ5c}1HO={>S=EzRzJbYchBC6oTBU7z<2)-lPO}%oI^$U7 z#@>rOYW(P9lxnZQ-@s2Vi=@t|A$?(Fp;78^fbJ`M)k=*36OhQ84}Z5vn#ii{frDxS zU0)!bqQQx>{@!Bk9@0Tac)D+WeYoF>xF7!;+G>YuTO&M>D)EN3FIQ8m&XO{X3HZ2&2e*8jyQ6(MZUOl?)F4 zr*VCC^?PM=PydokjN6lsKAa=&!9O0EyymFgwx9gw^N0VvT+o}i#_t&v_cDimlmioA z&(@$&8k)D>Fz@JWmyjuTAJule5Y<~YrOtk#2C+3C$ z^$&WLVbAVCO7bXEY>%n(+k;)UlCTQuVLIY=yR(M$dG)cbZLP81ZH<)b3t{!XAb#x0 z8-st5Oyr*?G4rP1%5%!tN5I%#E82DQu6~ZI6CG-_eh?u(=i4z*LbFXTFYUS%$0mup zPss-RX_Wakc3ZRoZ_sb3vs~Q#%M&h?c_bq}PTGdsWrAvabp!>y-NkZ*gV-%$d~+{k|CsH;#(;!nnuD*}&cr1e|>$pDx0sfymz%nhsP+2*$6?NsgcU zw(Ok_Kiveq6sne%k_@45j$Ab|71|NX>Vg4|U~LaN27~V=@+5w3CL&V+yV5US2^>M9 z8h&|{#Wmgq{sUC4?kFMll}Q=J>Xvq^IWMGkV^3AuJZAbLQ|(I%6O?fV4O3Av6mEug zedY37us5AL8$h3hsRpILsf7EFVE>xl|Rsn4pW*^3errOx)B701Medw$H_2DWt z#kgBk=_|X1&^=He9o`ZCJoAz7{=2h7O8m*)uRbiSPnxQ1x^j%_;=gNFL(*=c4+^S= zmXb!dPGm-FEU3?E@p%n-k!-u+DTf1f8*V#+4kaE};*pHMcl*}!n;9|I4;yl^&} z;P@WkHK<9cL3&0Gf9Xlo@t4{NYrsPGK)HoKjhCdF01wKo=lZwP?VJu_iK_+axEYYb=+)rRe%9Pi(jfLv$}q zwlG}kRQeP6=2KgWPZ=ls~LX(@SH_Ige+X9etK!jn* z%od6KTSxs~wIyb-H$~F}I|b<;K&Pb5d*HJ<9uI{8j#a(4Afj*5OM{YB4u#=kyWqHxnfv8F1-1M5(=G+~BJPCahj*_wffdOBAlL zZu=KB@N#xfQz+EavFl>O-h~;RgfZXpyx+!N(v&d!txb)vvX<8~tE|VJESCGI@ZySV z?)JrpH_SB2h@B(PzZXiW78jzo21v)B?u(pqq6rbgmOKN*&tE>UXGwJfv;%DQF=1nj zEthkK?_@D=fz%`Db8G=XA=2mwi8wLj!lCf!tI#eF<8Of z4g2Iq4OG_wO%^rDg*y1LD@~Y^)`0 zaL?a5(#{MAuo#<&)j??(qNu`o&#yFZjbPWe z%mEGY8~ijct!Wx{G};qhU6@34YRq|IrH5Mm%=Ql;XZly(s7809{*{CxYB(S>)n}4h z4h9rmlnkvu*gLcXK7%;hC#AVMfKwkr?fBTPIprr!HpYzW$Gc6g&x-<0BdOculWE=W;20W!cR#T<;s@lmrQ>_!Ar4D#6KVK5^1uyBvV*u$mD> z7i02!*VVXmj`{VjJ^;~PNpbM$+_n^K0?p1*V+6Y3_?%7aN>+(qgPmW2w+AT>6+ICUDdG${AW1Fu}eD9)94Nu>r~V90uGP#l!67C$Vv?(!>TMA9|q5~5TiRAAtCg~43vK1NfxUM z>wt-te;JwPmIgXPyvL|)3;!k{SAb)xqz=F!Y}@`w8Bm1&9ew-ZQF%IOtf)ago&3RV z-H*9^Yb_N@=ZS;Co-z|XmJUibZ}FZg#)ekihi-|M>V0xL(Bqv_02>bL0n4^Ca|RC8 zg@rR+Cxz=IDj8|__r)_xeRiOvEl(xmaK;7zva&jSWt85BZ5`7{Zb8p9!eZ==W$RXp zYpSOx-I(y(!d)B@W&6CQ8pdQV=*XyI-os}A=z0dM2R0ec<;k@4CK{&jLZIH$n>4p~ zKDs92l7%el7Tdvft6KMf$j zXMN5Fj5?*Ls3EQZO=I`xzP^Nn#1{Y>{a7!(K5Sd$yP8D=ACkw8^9yOf8G_%>43EyI z*Kpd;6~;#<#|m-bC=ZYxt~x(Dwn{vY@<3hJcy9SFo2SQTfi;_ zkwVDDeX-yiCo$Dy%w}D2J?dh*7>h_>`(XPo%fie~?`aqva2uaav!hW46|C z7?cLPtwngYx`A1Fws$N(A@P!!n$C+tHcFkR8flVE)j{47QX;o)2_h1)q^s1=oJerV zt{%nV}u6g@6M%B%=Dl1vF#s#O%JrS7h0!>D){8(`c9@mp=Vi1 z(y9%fl;rzpP)xKg+>LN@5@{2^%nO_3Net{Y>3i%@LmuS}-3^A0v^#GE6{ZZgrU0-C z*MsD?BQM0xne48cROV3tY}A^hO-%&TJo-E%+*qT}SO*(i(DP5A{OsRXfJHzHU}-!1 zR+4q$nFt}?ykprZcZCFO$6uU>HANFQUALNT#uj{nAOd59SQr*jBgiDh^y#RoNnchyBrB2--bmH%uZgzVi%(2@0g_1iwEGlr}BIY0y z^3ox8bCxxI6E7RbHz|S<8E!zyQ#$6W;ab&{oc)Q9sXg+F4N9KVMUM`*(H)z^72<{^ zLt}~xxSu_Ou}zO)!|NA`;gTC(PboRO0)iXW0j&6fW>f7gK<+n({Qcrjp?_uP6fLA? zhp`KN=O(?;i%r{?0ha}{s`owM2aW6(m&b)f087d*91du%5sW_>OROE~ZPW8|qEbEj zuz$&q@+|rXPYpS(M?4g`Ah;2)G*kVw@C0(}`%y#FW+Y9S8)JP5D$oX+r%_k$d1t7|=;Y7ec zl6@0*CCkyO6zYR20D?j}Da>!ikJsdMy;iff5s|Wcjpbna08ZVv4KKggC4pH0q*&zE z0D@L9;=Ss`JDI727aCMcNZ;@7{z~tlp=+ZMmaLS4vTBqV>1ibO6si1fVHH;o zdC3Urg=|9icQa{PC|Vch6)1ku7wHc%)(TV+`g%bs~!j${;ERYhI* zQFKnslpXo%rf=ILiM$zsYyrrPot#?5Q&P*1kc6ucsU-_hnNflh4$6LOEy9mUV8y@; zyh^JeZ1?=p-};D`Hfhv=vYKHDEI%n{(9+6on|v(pG9GmhF~4!y3D)!{PD3o>-)q_Hb%wmbWOul|-I_T$6~!yXeo zgDu`KL0&qRQ8CjV1zB$wD=tdD2#*JjxbzSYS16DGGMM347Ns$g7QUDz}W!(OB=^c|4HJMZ@1_I zVl&aS%q#UaJ8vF+3iPyUHc9Q96B5U%|r#?sD)d?|j<7|Pf^(EE<+qN2Z zO?W|aQAG8g8)$<~t51O(s=6&D&mi1qKEkiRyg0UiOjv4;gDMR}<*-(hFdfl~6i)A>Y06*SB3WwyMjU z1%?}Cw`?JPywhr+7ka_X@^pAbfHYy7gx+za32MiPT-~;PDlQsOjw-du18Xv2FP~v^ zSNabZ*umJTkthraCmmk9@4p3Spo}j1*E(zlMLc!FY0LzeJM8M+&-F0vf)PArqRCY; z6n4fg?WoN?adSFU?H|=jyRdv;$~-V{@k6!J#gTsdeqh5_YaL{xu~bm=_k+U#*a;;p zJ&+ZGcvEE1HDlVrT%zVF#>P^hNk}BqH*Xo!renB4lr*-1`9neZEiCQ@`#v}wlOO$- zSj`bW;qPW%P`5B_?iEO(Ilh`*TElQpJN_$RuIKY7puh3gjan&3zh^OTI@TI3g+;15 zf~i(Wa{YBt!IrzU-%oXEJjw%@(b3=O-=f0y)?vBh`UcbZGvPv>8TtwC^GDRZZSEYE zZgL`_$rd|gr2?WFTg?xy;!o`TTI$Hdc1(9C0UH?U1Y&x?{V%HO$)R%RAenVcgY)V} zzncxWKJAc=mgITr)KIS;N&nKGd2zNQk4PITG%IMl!9ja>%R2_9MCd zw^hV0@P}5q5{dWynBjeXl}<_~(sp>Y>NN7T125LN5a!rrPsOFaO5z9+Pv5`HCyLRd zpefa{Vri^g4+kD)*=ki9pI(?mO~y>~xC_SfD$Y^vJ4v*0urrHsvKJVy$8X@gIxM3v!d-kZCYjG zRx>=NWGhuj>>L|qdL>fr)R8P=>2qvb@Agm3!|{R;Hr=xme|Q8_KAKg?Q>Vd4i@Y0F z!=WDa#c<;+kO%;5zzNcL}bu%tL zmwL)=FgYdNF>0}Xw!-Rt{2Bz(efJgH>T4F)8-T}QpnkE%Z>?6z`buVOLr7MqyuLqG z?DB%zS!w*qmN^hHctN3*)Ov<T%{?#Wu)wBZxuPM$tqsXS38`Xprkcq#}Rf z&DXL;i8LjT``q(#RHKn+B}I>|MFGJi;vBL~J&>=HVmqK@wm9@TvTd8a=^o!gC=h2#9>>V;4{2d`iDe&m;r*&ak6D^6nB#=Hr0}#WCYSwxT=zAt) z(oF(TiK;xm6d<_V9p)FdX`yr>8zPgs4e4@}>z0f8lR@5UEnSs`hc6&!CrePD_C3kA z=FUi$^kI2&R}|cf>bh_@BemM~(eTQ}iPGGaL&B@XHah3g&mS(zVpDTGu~&wz+8bvI zMsrP*WB+mqXXJG*d5gflv<(87RSZbH#rLgS5;($5Sb6}nYqSFOJ2ek)F@m$bz1W-? zR1zXfvm36-p@k;jQHt@xL1{?I?(O_(y9J67viuFq_U*RBI(0FBBszIQEu3E@V&i7o}?HZ=o9jxx(W(OsZzpiiY zn%wi^Y;p(*QF=E6N<$-=R_3HL2ld0ecb)Oh=P8_2eEdtd8~X!p!otEC)m0h=LL_gy z>HQ&nCld)C`94kK0-y7_NaSX@3bZTs*F#Kq=cFbk$vXTO9Hef@R42Md3@}72P}99Dxv_bq zCi~3;=-r8cA5TXDUctKjr{!z6f9xti>NfBjtYMG+l7;07nc)g#jLj8AMs0c-z_#Ua zcU0J*cNU0T<%FW6$2QL3Y_UIRfrxjrY1-AWBp=2Ubc>XBr0`Sk8Thzn9OYj}1CX)k z-T-E^pXsbT>c48}Dd`1WcJtEy2G%=}0-+U<%naM)td4Mp^{iD7clFClv56a*&fQMs z8A#MOm+IA;A1ljMg5LqRD0VF+_lOeP7HSXiGhDh7b3f4yThLakQ%XB|j#j53E!BbY zh>~AM9&%pD;sa7GRwjQfVr>M}7Z;u2TfP{eD{&!PI=p-kdY8z zy$|`kmUZ&ObpF^7fB0Hle*7uMz&XGtS$JT>PhMEKLR|5FH`Y7Dq_}HkMGznvedl2F zhXI=#-geLLHykbr)q4o4tL(J=oS!OkGuyKjS}fZKmD3qTvvDcAg;>puZ1hDOmxO2(L>VD5m8EsAntt{0P~rOPC*|H@lcfj>m2rT)I~JUMkQuT?d4Lx z*aQ^I%QtXp+r@Je+9K({^7r7TSl)SeHcaNf`MPiQ(ewFZ5HT;-^&@4!7K1bGj)QAx zj9#v!vV1pS8+qa;^Zcw!tg)$u5^vyAkOe9a6$zfP_d%BPB3GKo~JlNkQQI&Qh5oj#g9<%0lomzZ^s7!G7fwEzWTp^t$>ucA9GKiRt@VBBgY0k-`)1+t&F=o z&BQ)SGcV5X^*`T7+H;eQhX5REi0?<`=riBA77FW96hzH%4D%Bnu)136dP@OK#d$xm zNh-ld8RJ#59s??$^>5IRT)FMWPTa#*?)dx238ZKnrE~nah@fcnfuKv1Y0Gc2e zLFRnxC3e|$)%#N9zA!mrNL;kGY>DDgp>5F4( znxaopN?D234@LqsDj)!W5CCfB*{&V~*Zfcn!*k{}ZGJGlqnN|O!C?`78Ov~xoY-gu zuNU8k`gB`KKtC=^sQ~!F-tb=Z4rZ|hK@&Ho3uJR}aDNO&cSxm($#|7&9x`t;q^=G`^z>Rx@h()}=Cp-X&@K3b`#r6xU=Xl7 z4ZK{+u&Z$!m^5S)7>q{MBzm(%gje_=I0I>R#ytqByTPSI3t2C}rfI!AJ0^D5Y$HlQ$rBjFddJnt%}*^Dm2 z%q9KIz$f2Jh`#F390O<x|NlB*s>dd0Vm$svUJ^l^VxUu++KHR*_cwH!ql-&7r|8i9h!YmshTwt?^p zzNRd1jm{saU@Z@Tz!@o&s(9EkHnWcQ3Wi+ka+M0BB6;|u*~!*RY!BEduT$cjcl7DaJ()o*%k+{IZXJw~StM4|4Sxac-rW77PCjc z_D272j})}+>mze*pQOXOaE z-;(=c&cv%3VWIpPkx{*OLFIJ2s{LSrUhVVu!UmTlY$GLuf6R*Oy}C2U!!Mdol`*XC zS15GndW1N&T0VloU9%FUSp$bf47;cv^G_cC*oupK`+K(^E;9IhlPJZGf{T4PSXBm*$x9N!G`D0W}>uPUMmnUD;0E!y}grUdA1@gyF8LX#Ou= zw$6#@=RP#&>(LAzsb%K~Q(zC6IC^WcEUfRr>9x$1rJBWyQ&GOMrgd)A!CGSf8}*rs z4bW9lPEuLhHsJ;jjo&5BB|Uto@C)`|*;nZ6+CobL7;hOZ0nVn(3t#@Jud_)MmQ!;Q zy+LTn*A{*W0NKD)Z}+HSagcIP(}x@P7MOyWY&f8@2{AsK`nlQ?ei69vH2?^Zc}M4~ zA-=>qJRz9OUtFV)DiH*igpso}Py)Zi{mT>RX^(2FOo~A0F5s3V$29*t;l8EM%$~+n zDhAVDDmE7=@zWFDgl?{lyId0v8ksOD(+sQ38BHqY{dpe_NqwXMo!%$cqy!#Z_%{IQV9I|}%KIJvNh%m`Ua=Z>&`-8?{W+@5AtsRL#Tj2(v9HLDuCq=b54C_!y@?R< z%U-n8$1AoXsNfz%_oSt0^v^+0?C4JouwUydeL^&99?r-@s@frh&}r}$Z8Y)N0>b^5 zNNq3=hCl5H$BkbpsFX!D3ZqbjlRW%JnEKQ2O&&KEc@3uFByw@%gYuwXgZ@4LuCUJR zA_2K2JHP7B_7)Z!3;%3U<-o=wr|RcdOg`w(qvcl{=p1ysh8`+})>U}(I5a>P*BjQ~ zUQG%=>z)ev)0w|%y`j@e&JrbGq}-=lvz&ZKiq;Km7OXB??{NGN25)yi%KwksP=M9# z<8xfbnMsDQ_3uhh0F&k0KI;03d>+67-fUsc5C`*B7m*#?bimavm_Z_Xlpp*dekBxCl;k`#9@rUuK^;AOH0 zDNP=uDt5|5!?mq~8$H@!tON-lwvaThawhS#A3E_dtH`ehqY(Q<0FgGZZk9iY#-$N3 z`aYT&tb&P4@oX*x*kJ_tC2u2o7XBc9do&-Szvi9C61d{;gG3}^1SI}aI^kV0UE&1a zF(n*uu3G)3z;Z0gs9c@^c;6-h3QhPcvj)=e-`$(m@lEJC4%}n_01N|#q5t1G%JT_u z^S6DEpF3E^L6D-e4pj{UhXt5^?5FSE1FK61fejDA1Fq7Pue8xaf4#3~u$J8?X1gqg z0IsRjp=y6Lzz06|B@Q4WVg&ZF@k9r^Q+tX{E5gqwBA@>J037_R|GI4VdDM0MjO7hI zLu(Kj>9_7AJol<;wl%hb0&(G$r3AJ64R=BnfL!r%C&T@67(66s5ts$U0(K?gIy{1? z{jEbq+v=qn@5Cnr5A;PxRn0GKXkzkJu91#3EXx*1V9a|_qBv>}db?Qel%aj;mS4d5 z^9leK$1_C%PtO~Ul%?5l-b$V7)K%-e51BrjZ3&A(;^fQz3 z8s)(Iwbm3=IZqe&utZO27FUX7plu3hJ7_`k>%xK~nK7~i%DEdrUVWIZ zs?c4Dc_I=y?=u;CC3@HUI-j-IFK;&X99Znnh%NwgA6(BYV(O8-U7zA0Qkt)>RL@tk zLIgmhjrq3BQ^^fT^HONWB%aQ|ljLEIgGHZ?vYt*)g$ObrLW!b>1j=?09|4var@oFj ztn3@U62}uMho_;0(T{rY)|3rmSQKaLSa`BzWsRmn^xnjM!+E37OMD$>2x#pU(~T{X z42g6~zhJ>a^F@BhGZ9VT*gwlrE469`=VinesCBCWI!)DI8h%rTcwB+H9uGOfmy?o3 zG~Y!fiql?hB2}{l-b9|!&N(f|X0w0N!$EH1Fbr-D3|@ahe_)!vgFNZV?)xIX;06yn zS8xA*#UpoI2`B)$wsxE0uHn2XzspB+dLN$4bT+Z`vs{NwtnLoKoGsK9rniznoLE!D z0^=i>+5ckh&v`UJ@)OT}wXuQ+VMJV)Y-P5LVoGbo{QRwlOcwd;c^?Y-k^l_j9{u7fQe zj<>E0+nU^+S^PwPezJ6tH_G%Fnz(zY884F_oFez$zy>edxyZsRbCx)vK18kna0D=%;iO zABvXH$7sxO>Ma^D*MR`g4qJ%^!KaE>H zmz9rE`Ykyh@=Mp{je!|9+6!D_Go&~Jlfv82UI)1DR$_cN6JH1m*LfG`To}dYy3(yx zE`bfyXGIECusr}`VcoLx6h#R~7dyKP1F{f%$yR9~hRF)c+#M2vS&+)zMQL`D{zcRT za`gL!_^trDfB8$L-iB+=6MFF_AL-?@+nLS3s}r6-x2Q>m-djs6)*Hp>jjg-QtpyU` zj=WKeyrI(zM5@+`bu2729$}BoT*1R0(4e{!DsgWJbYKCk&XP%$glmr0r%=hH+c(4d zdVg>?#u|PyUS02YbE-mbQz_UcA~zxFEMtEZXkRE10bP=pfFz@fUfm-RCqhjoAwUQv zkvkP2tpAAksPt~Gnp;Sp=0S9$C_{48yzgk$u7KCy1LCG85_q}8yD}6lZmgB2Z$e7w)hhijzGc?;v*n?2DK|x} z?A}3;q|cXYVIf5)D0*ua{DF!8BkOBx!S#OSl#efM zIYk9xnm?2Y2Pa*L76aRZ6sk@sUpt;P(D!bCi$OV;!p=){CGUe?0Fh zrez>GbPLix`Y1BJu`lAZAr+PPvvQ`nPlO10$g|dPvRYFu^XQd(GQdSehTVuc2K*gT zr=)8doko9L(arabj?b#g%8^Mx;jm4>GU!ZCQInQPv`?bD_;l{7dj753 zo(bk{Lchm>gZv+5?}jp<$9ZF=aKH?!u`KpBKuQpO$rQ#WiFgLEq!{(>dfeO9-(vu1 za%#^Ir{-U7=L3g7tkNG50|w}O>}|h{7?=aDOAU+k@C5o)EbrBji2(XN%kbeE0MiWl zN7Yy)IjT_xb3`g>6*-sRNMm0BKg-7K&78h8l8>k-8Ae+RnNtysRuZ$-aQo;N*y`uD z#I<|=eGQbqr68Yw15)s%*J<=6%u$9R4gl0rHfsIzX2Fwc43lHY*0thNn}sifo}Uo% zoo97R28366>NU&EKo|X*yW0Gi_tdKmlNzhs7;mpIv=l-!Q@!XQw$BxR{?(sA#rB8k zhlNEo{+)rI)$K-^3Ajz7ib9KiYv0fC0Dd4H1K41H{j6XtkPprEsLNUXs2^*R8z}J3 z7Zd(!W z-e44o)B+<;xRc4>5KWpz z`Cv`u`rk+62A6ld*oML&zgAYAMdKKhou0w`(dO;bSAoE!W_P`)p1N$P*Kv+xR&7FP zG0dya9!PFDX`Y&v=DlmTh$JrYDO9eP`_hNGAvtIFkAr9k;CYkqwf3@-%seF5r#M;% z2q&%qFrV5T9vfOf>0+)jnh8)Tb1YgXtHJ-X(tAir31OmE1#aBmaS{n` zyWfGeNg(!8Sgs#F3YmBFf;i$z4e}+y9AbI%H{a238Xe3Yq0lBD79?7vacMM6RO&1C zF66tbq(E=Y!G#R4;88Z5e_i>T`zQ%CxlC>)f*x(73lsaMD8))6h6M0Vt_h0El7NLX z48i<}6x}u;OPE$PZ0|h#)|UTJ#Lth)-0B}6gPu%0xEA=7Z{}{(+G9QeVKL#)y6XX% z*;7na#@Y@(_efrmF+z5ST6iHX|5C10(B1DN+zlC`)#v)6BRVwgwt+~a#hX9=z?__3 z4*KZ<2Mx)A+a*8ad`gK;clPvPQntR)ky^7^mHgDtZItNJle}Aa!Rs>yr@xXBc)wCh zHg*)}u38KRP{(!ut{K%nj{v;awd)x6GwaQy7`8J#T_+O&kaGPmH^b;%wyoQL+qQEK zdaO?(yEyV*ZOyfL_>@vL9dx8=-6;(bA$Yjk zL-ZdqiU0;4wuFy#z`PXeps=7K)8(x-U+_V_;or|*y87B2QiVz2ya%&DaX8##!y?*a zwmo@{V0fkc6*T`oD;B8z?K<76^o)4>Nj*&+$%&p8sf0&Anq#=Y{pHgf6yI-045FW& z!X8~O4ZrIxS+7y`wtW@7*fdJZ`J=A`R*QO-4!SPaqTQ#|pHtITI3NB)t(7fQa&h)I>lsptt_lr+YH+ zz~Ws)dqTZ3FfkS*0=;cZY7@Re%9v>B2Rd~e5ia|Z1+U|u#S3{0a92suUUL$0$|dm7 z5ClCm#}LvO-T225NjU_dP%;18drUz;o1*8+00i{;cfQ}*8GR$6NdmwIBX&U>7j+Y*1hkc{oW2&~5P z$au-`DQxZz6$d;r)t{wj!a!_Thwg$L_8Kk>Liw@aRtmt{5YB^tsv{5bd6co&6CIY< z-Mif6aZ_MhtHG!XNKD~LUPE}#+QYd&EyOy|AO>7{IrVx7akq(Lpl9iyJM*qXKJx8C zFlA`u${FOP=15$e3Ds=%A|P;Gikke`&XrK3Dx^u%0xZ-N_xR;u1pWFex$Nw!(X#1@ z`aVo-S`{euC*)O|H~eA2hHHK;j~jh--J8;7!}At>Z*Ub;;zK++m0@dgXYx*mKcaYL zj~Y$E56+>e`vHCC7jnSk0w_IuGq!>4Kmk3{E7JbVdb^8f$zW7Zbc3&4GG5{E4B<;4 zI!=!IBKT4r;0F^m%`=M@p&|S8_TYsW#qV_Z&& z(qT$cErT~V4z**!D2c((hzaooB^&&iDHmKF)c}_0O1TOm-LnJl+KN|mzEDCq46RBR z`kpSVK%pKYjs6a$$7LZeS;Q>H?B&fO5AOiLmadf)omE=(qt<6&HllK4U{!CxaR}`s z(M=r}7jD9Dg)rW|Tr>ABlKon7aANkR^TXaEqmKhu5Vwwf{-dh96=~|)h3_F`N3QQn zZ_K04V=>&H((6FB9IobsYHQHa4xyJ%i?>LAVYf~(MKyMrrleTy%=`|U`T@kT|A9Lc z1Z8%niPI_Z4se@tjcZ7eN-HgJmd3=TFAQpt`S>#!8)K;L9b$(xfOE_@K}I14;xEc}^#g-g4rG2Ux^};O^YUXr>P2eF<9Eh1$YP$gHEmJ&zJ!$BL;ftGS~bZ) z&(V@iiK{hM<>Y?#@T#zumlF_iec~1PCOTyHNmhO}&rty6TJowB46^~WnXbi`GT_L7 z32UA&Ra>Y7`N)u-?3t;H*MJbP*w-Ou-_{?=3TzYD`fG*Egzb050OkD)C(Y+f>f_*K zFH5@!-gPs!))j!hoW2z~+ed`DbYNyC&ipzULIp#Q@e$dQF8e`66-8 zpZ!CY6LH?MT<&Aa`QrGI!M_yp9FgaRndmldoB%qJZC~-w7{EHO*f5n8tS#KDumbp@*xhZ;^8LMLU>!t?fIv=_lM9MvAX$&vsLF4WN$N;z zuc2mU z3cG%jn5+-RvQfK>Q`l3sBL_C#OhHW1|0YX5-`P(eFM^+8ev0U!lUKEhhw9g@;iJwP z(QNCoRx39eU;;|Vtmcmm%HcOH21&`uP2MfokeA!LR~=0*DCSQhS4+;;+5+V3;KX2rqVn0j#3O4@|k8-9Fvv-}7uvWsCgT)eN`) zjY@P??lF3UTTYM_cfm;jKk-s+{^h0^6(i2|%-8YRzS+J+hrDVVzfc#uw#XWG0VkE; zXK{ow|P~^V_-1ap%n(UcMlDsRIjNGDj}4 zK}-AsKRNSMMHH){LFbn-i51=qh&X|d67l_z-IwFy%=M8-3vR>cBByiZh;L0OdC5D+s{?ySQ$DOs4xV+eaQ`yExgYC0<*_-y zE;r)&hoU4yi9ejnSHR6{m7iiUHP2yv=B-DS+_75%cJR7|!mi2HjkDHt+ozZidlQF* zLwCgW@i<9m*dHBlGRI4SsXZvB`O}s#!5krAQ)c5H3#vHtVG7!KD=y5)#n^5O>^mz( zW;DVoV-06Cr)#W#hkPG*QBPz`V4DJ%5*)MAV+&*qX#{|T&i9$Yli9Ba>5+Qr~axY4p^ z>qpy<0=sacsUc)^`hjND@WLb-cc5@D#0Gu$A~46%1IO=e6?50c_ZtXT8@u90|BzFk zbqh&0@#!fKHQl0}xiVLDbqECV%Q4jD-{-%L%G3`QiGkfP`3Nl5P~6)W$dKgrXlWCn zWGP3=5a$JFrkuh}b-@B_$+64*#FM7Am~?gxs-We!20uaHd!rbduFmqAVS2B7@rRG9 zBG284Q4-s%dMC@2cw3j&f=)qou$zlJ74~ztSro^pIIvA@$7}eD(5b8jnGGn61MF{M z_dQa)fElAVdxalcz>o8m&eLJk$<7G=fvZ`ZPOZNb41IwQ{g?~KnNF#vf&7OHnbNGf zjk&PG1E_rG{e-@3TpivzG_YWkUKxH3d&y`Ke?&8@=ECH@IT`%9TNGvrjw z^6o;7K$e3(oFLoP%QpYbU!fZ*BUud~`Gj2dSWAX6^rX;UTxTn8cPtAk z&4&jjDJ3;_y=v?E`Ld?c2OTox0Fy+^8yhF@C_o!PuFE^QQ4Y|K1sKIa9EUR(m51o& z_jF{fsN)j@q2;2ar}Uqjk6TjCU3p(xjF~$0iWBUbp2K$9X@dEC6|WD%QYMO(3@Uo` zWuSVYZ|YD+W!Jla#&MhDe>*I|6(#Ad3S|V4$u3XfGrlflu8ZSWUuin?F8Jq2pjbLQ zZTX)iB!OwaX^n&bS1;0+>n!{MeJaQ>dL>x($M^;$Yb9vo1vuFxWZrhVo&@egE>`vO zN4sb(5BsdOu?npCW3t=BXs6Mdyw?dA7tRI?zJL}+W3hVVv5iA#qo(%<@31F)?d0%b zv}(PPTKyrEy2W{+5iM3B2V$eMEfkR~9aDJ@J{HUgNU9WAOal6+g5C-+4VuZ!>P!7mj0- zBve9p#X*(U`VDMplhnZ);WffxLN8jmbeh&t#H5nqArEG~&VS7de6U`ZMiB?{PJw3i zopUQG&)RusV(fakXnt1Ol@AM{V+7+W2UQ}DBGU6JKSaD{ZB7pSs~|k_7gKF?f9Ap3Ya+BJJ&H)DPMhKoTWmUd(J zTd~fp306l(D@IT>PS9d{(=q+k8`Ifm-;;>M(%e2ezZG19e zDg3pKm4BuQQ%h*j`+RP)KNB6iFSTA(57lfB1-6LAu}xc)!wo9&xM%d|ENC54MY0yt zB@p<*!^Lde6Dz|7^%@=trV3jV&Kd)^M861f51d(QV5Gd_Gr^yjm-B>%a%hJmBmi6d zx_SR>h(1Hz>1}W>-D91WJ@pjQDNalzq*bDwI`K!6&=4{M^k6`hOLJ%a&qe0TDhX3! z&JkHob}vUsjVuPZQX4zpr#I{?FZGqMI=`OYyy7CsQ{3#VXdO@Qn1Oq0waPRly(nB& z0UHK8?y2`zx;ic?KSnNR-13nVBkRWret{UO~E8 z7^bWt@=JnhBw4iHH`$iJk3>>d7C$Hghn=g(ZsOeU3} zx|3~)@Y}xS4NG2g0o z!qK3txzwZXt~8LFwlFW8?B(?LD~?Y074}KMy<%(>3xtN~^}<5Q&?a6K>+~6hN>U$; znO+J_*pT1~l9#F?*y2`Vy}r={ey1C>rhrCe6moy(mCRb%ip?=Kf=^0tZ9mg zA`q`1t0^J)tI3UF!3+bU8#>Rb5K%!AgQ}iIZ-+9yfj{2{~l&jT4@*!uPZR1gEL^d(aBf^(QO{ks+D zT8CtdprIM1w-j((?oBp_y7J@b3*~?XW0Bq>#r(Bx15PjA>+{pTp#kc(eV%GrFys)4wt%1O-aOJD+76R35k0l?<-X@LTy%zXy3mWty^_mwHl zb$+m_;}}7{x{HhgnnZg3Y0|fLi!y>rpqi(owB+TG~G<^rJZJGpIY( zs)JcJT@}K&G-1env56-Vh%tE9|DBv^u0y*0kheR@7Q1vy7|Ize+580Ub*>Xnkwc?*`-BlQq1sk%plKNqvq;&CUFd#mQEq` zg|U=e7!1n9H(fJWmpJ*uk6gM@D#Pv=6}rKA@UdA94_}6k6!XfnO|98JZjI>+7OA^b zEM4|tMBzlO5%!)M7y=6oAY#rSPg_~Ho^`SlOJXZ;TyWyjRI*nON1Mi6{v}R538ZQ$ z=pm?k6#O*dR-i=qV3aDCBBb@JPX{Az>(^t9{asyHvu2kN;Xl&khogOhBe4c%(rG0^ z%TR}cjldM(@nfw1_xR;+dHCyT0r$^g2vnDjc11 zdE!Y3%-i~C(8Gj`ox6>CMCgcjn+1x;?;9)fx&GY?9|8WVu&L?NAVeD(r@q;x8@iTg zUkM!|C}kh`wV+{&t$Bp6{>LBtg>(r`japF-D!i*sKW}Tg8`;%=&ip_2a}%5L)}#_} zB?pb^+lyZ6he||l;@0nLh$UV12e-D*-aOc7d`s5%!28YeU+H!%QSVgA$fK_MBBk&2 zHqROVd;S~+g4b9!1lx4Fr%M82O3oFkM+ta_a<1#=jHXSb6@ZO77$+Hl3?tJb`1EX5uA+W9Q= zHmJz7a7$~1@X;smLdR|Wb5j0*DdhPr29@XPn>JXp1v$gP8QX<~mwj6W;E#WvQT3zM zC!NkH~!EO$Du=>7O$_)o?!NVFquj|46I8WC}1$nFzNNLXh2swoGmh3fIdO9qbmz3(^QM}UB=new+}-y<$?7;OG1 zQVi%=XKT0IdY9mq+NaqJa60UsDsI3}~EQrWKD42rZ>{zwG=#dCnLnsO3TEE0! zJgO+2ia|1F&jZQmltFP2*+*Q-VYEtrn5^Sc;(&5J=&i$}tLg9l^vo?84wV0}Jd>`O z2)An|YB!j3l*t?cJ(B7*?h&)CbFoGzQWzl7t+<^9C6Yu1M@$;>7V@4@sKl#4GM$p6 zf4*Yd94SKoYtJs;Tu&_a{JpR9ZvL4!4Xj1E6j5$|rbk+qaMY1KbK}QdAIKV?Mt=m_ zZxLi?H|TnnXeJcN=#G2#*EG+l%GZ_>UgJIk&=x2D|1kitgFf5k<7M2HCFDL3>++0L zG1Z7S#{-^)(f%PT6;T3`(+l=tiTjg~WA`mT3*Fvb%m!O|lFK_G+DaeVa&-2fRiZbE z_K^22ndgtcb`<^ZXMQ8HdQ#Fjk>G6)UyNjYa(4WBSBC<6v}hv(^i(fai9v3! z%HUh*Ee#r9%;bm5#uWIub#4VcDdAOVPuD(>i+T%oClw^4W$sf3*#AyRkt)smPbm?> z^)ia$Lpgm!CVia=SZ6~reC(q885%fr-|W$Db`|%YVY8qRW!;1ANC@^+pDB=+7@k-? zmq^6%6rUZ=J%x0_;O=sSc@{yjJ=gx*EMhUVBkkN<75XOuO4AtDBg?9VD5#hEH9YTG0^`n=X(_jw>akc(f1Ey;GM zL@Y0eAqd21`TG2Yf%^+#=Z$xjElGU$zBVqu?^NmUQ_}4X2=gFr1Lu!#G*I8PI*}u1 zk?5t?0#%#O98`m7MXWDdds{4A35-g^o!r5vmqKOKg!Si~_(k~|mT)@wgs{U*5bng@ z=tRxVy0MxYq-w@&gI?=SDmn_%mEPA_eD0mJ5+5ZroJQb5_cS6ZVp0EJ(|ok-j(|$~ zhfOLfEg(iXJ-0CArVfO9_*xm4B2qZKAM3dc@2u)sd$V@LU3EX(7dOeY+NSlVUtJW_ z4meZYFqkW*o1x$1Ii$I0dYQhmk?j!F@o@Pa;O4Yn{wqMv_{uQ0Y0&QRZb^=;TGi{F zir0dpK%9)D-DOcv@klMj_{H8jZ3{Sp2y-Aj$A@im;k1bPt)n3{U2+hYuET$uMm!by ztsk!wh??5hsh^b@mKmt9CrWL8^Go@DmUQE$(n6~%HKM=!-}w?bF2$=vnx+e%JZNO=My{**QtbnO)I(&A8QJ z7gXQD+L^ZDDo@pagX1R`yqah(3s|9*g3?6wU1Orq!K9^$Z^>iYMcJ%$ibE{VOGFZ_ zSYru&KM6x(W2x%4))oD?R5;_K?Q^f_aY;7<$w6i{GV9^#98YP_g?%NgriLNIcH5;0 zWE_jKS10j^s2iQfk8qtDh7vlRUj)pELT$f<&o zITv$sTgN#TKMbD!Uj#U$)sQ^e}na&T*IH-3OrAVU2sP{8V7 z-aDDnfAXm@ZDV*l9>k%^mO@=S&tT5X%=BG!XsS3gsa$X4-%rN5*JD&)e0=w3zz}jR z-1r{?X{-1ql1EL9uC$*Lt~PwTQ`h4eeu*;puJ9avHh$zRPv;maZUqDY{sdgeebA^W zvGn?}xSDw`3Vb3U~E-ivjY6vaETUhYQQx z#mxtBe-}HM8L=UHFKJ#4%V)_EM%@$jK&p+*q@w!u=F8^?En-9ZdKVH}*C#4hLF&T1 z_i-br7)Jvnp_=O`ON8{N45g^RUya=)gguARe__hCL5e=3>)_!MaH6C7=-rH=jgm0K zoy1@*71|Sfwu_K`%Ofr>O}Si7#kAE{YU4vtaePf1zulvlcsRlJn0hxjVe*W0JI9w~ z{x8APg%3n-6u4Yr(s9d&v>O;ysX_5k5O8v~@Dn)0d)Vs(SYy|Sg1a~~q23c^b$v&J zjMoe9aG6)zELTFFwel%Zuj{pX^89pHFBzn7k&BK>qO3aIryTNn< zze{un%vVx~5O%1lGqeKQS|d~@MxA+b;yd6dRk;2JmuFNU3qRPk;>L^- zFvE7y9J4^Ub@|{fXmm}iGI~#i7-gEy2=)lC!yMBffMOEn38YDmm@7fzmR&2%Y4x)8 zN1L?Yx_OlKS#c#0OhRJQcy*hPyz*sPgcDQ@)x+tg`>$gAOhNqUM{YjMF0`UtexIUn z1i8~}kTg=gD(&SM%z%cC^u4%d?Jk9;uA7xUvEZBTpPO3fg)3BBF_ zTwSf^Dm65)mWn#R3Oi0}P zJe9bBS+u9>{=Z3(_O4sa*3AoLMyWabQ=fdA0nQpPhWSWPi*J1eb`RI>PC2u z=AvK;3@KecoTR+WIQfSQ)g1dJng_k8 zEq$u3IRWv{WtzfNY=zKUEaK{qOZHX34mJS&w*;--O1cWQn-0Ey+9}RRSw@fE9TA=1Yq>WJ^ZyyfUqq-kF2dL}-;^0> z*m3fL<_8{G!oT_m)hlCukM%u}E6f^B5`+k(2h^UE>9dWJBG}a648b; z)_>f%;#RWc))URPOl0TR)ToxH*qVg-yV9TjVDv^#vO|8l7&w6$?5k4#|fs zSRFNyxn5ks*v)NCNyshloI7(le9@6}Zk+`?Bz#~`8^zMS1cIHtduB{D|AdMpV77vQ z$L=oaXz+*)a2t`r*DMYXf$WrpSmUiHd$8MmSRoqLp*CPBRs2rN%sW;LwnYf4L+ zODpx->INiwcjzC5a<%J`>ee-piC>ZGCZY}mhLBa1$`tqXriI9%8hS9r=gI1k*jdxL*FQT3JA3y#vxP>3T6}5hI#!1_t ztBpf9OyRoVwhOCfw?e6de47&&pz+ve&GL$1$Be%Gw>*8~jEnjfcnnoE>6X(r<{e+U zqnC#>A1@99`8wu*NsE`gmIIa-rICxLIS`I~ty@99q-ZTT{p2Z|A)?HI{c!2@_tShR zWE!v>i)NS-rc@#YH~hfRZS7w`_1##ZX>2b83XL#}bDEdXBm$sk+!ydav`m|LX$ZS| zFoap7TqH-1Jff_3Q7pJuoPX89>ZztYBhEqa-jp)mGcEbWWIBq8dhcI1IcH?s=hE@C zrH!T03kMEz9;ERjcHf>A%I)O7dPaA6prJwo=wPbWoS&x?ZVjawEZco5BC1Z^Q+`O+ z|2s#awEuV-BCYFXp4>0lt-0grM>}CkRw~xhV&; zmul1)Y;ipn80JbO9IWmeOJ(7Rx4FIi!BbheQ$6oQHS~b^>QT#UD(~JadP19GZdSlA zIxjvY9W}l>Wft2~yTVybUDvgMmI@tPi8UISB^BuDViv=aiBsl*bLdF;KkIT+iF9-) zV0nu!J6F{TJzjsGW_iIxi)P@TW>pN|X63|>kOft{2;Jw@|MWHB)^Ml#XT2hS=MC-U z*TtTl4ztRJY>!Q*Si@9B4Gs|?P#809U1YY zqh9tkdNW}>eWGqkw+EZi?_)VNybbSKq=RcvEb_u=U2dmD(=@;8DCE}bbfZI45p_h= z4&iP($}-+Gy1?I-Fg{LzJ>5~>lTIokW!P$ik_+p=+AB4(9k%7g1P`CpK>U*XgHUF%SiN)XyHutDnuWDL;suAs!C&Rpp=ozN+{Dk~~Q-vT% z_9sU5v^+FcN%?RL`)$~A+)8T~n2epK%JR z0pKfk;tAV{HX}}^FgzWIth=6=FdcGJkIhTldjpNj-WB7E5cey0pVH`|sOJicx?1-xfoHJs(@_p62#srXeO+l0TeR1Lu-- znc~kw&kZ6sNLN}0(ym;deCYv=zjzFq4 z&rIE=(sD%KD|%b}rH8K*`?;;Z0GO$jl$eG;WbvN*_{=QM4mSMO#|x0k1$LGu$x!>x zkFS2bc3n_N!f6I7T4%;imOoE@_mqTk9?iuHl*+-sjcbX<=Zy0RC=NeXytyzb%vp)% z;YtZ&WTw7PP;8r;J_AN0uKWc2o_+r)JKcrKAjQ_057F ztxulX=VuCSJlw8?QWNR{l|jsu-rd4@o1T&q;-IfcP4;bZ7Pn5XQp-$xd;1&9 zT$p3eF$kLM0u%Z~hvPDM>Vw&l?Ol0%mL>^2Wyj~!Gs~-!+s;Kr89F)lKRWVKRW=R= zgD0Q`%5PO~9&4LI9|wJ)N#- z;$P3`(5>1k?F$sTGl5tie<CzNL1ZmRa&Tvo71HyYb=oThG36alf z3>7B*0kl|KVMoG|fjg}EJU~{ZD#T1Bcpd<7#&C=B?vv^{+Ty!5S*!QBlAdk6YBHRL|x$L3D|FnU8wSA8G7K|M`Q#p)wTpHbR z>IFKbba~D$+QqCY!zd~flzSG4x1cw11Y%DFpH)u-s-_NS{QcFj6p&%UkLUC;)9Y#u{zCEQIV!)stXcid)h5}TyIks! zVkFAsHe$km6|V|G{%x0%p$j}6!U)h;h+PrI|B%Dp$v3%=iaP@TXVI7X9+!MXSPKrt zrzH2cy%G<7kBt}Jq8O)5Ukk8ypxNqSZ+PEP&rjjPN>D{*3QdpB@%7%F1ab|?1izIJ zmNlPq5*>wq`T!FvpvqgJou&F#PJ5t5N7eEFc)H4{sNSzjrxF7K(lOE@NH;?bDFaA{ zN_T^Fcg+aW-GZP9NSCzIsW5bdlyturfB*Gu;HC6k*I0H~Z2 zC)1ujTO*oLN0kFUWw}?x%_&DSN+koTad*gAykBQh<`r*p!p?>TS0xYtORXzYmOgBW zX{xBCU%OEeIBGIMgZLtl8clE%M^fAstbXdX?+0Ncn8YTnKeL|14V7|mb$J|AGDdzm zww6^V>NA!p_}bX?o@HidNz{|3vD;r|Bf$#~7yZ28OhTb;{9J-_d3HWj&Poh^;Xx;= zPCizh;Q*O0hZcFG*Y#xrGf=(^o;}EBRSm9(p%d1`SDNg^CF=7hqS$1;0@1AFWd)iQ zh)>B|>}0=1#XEAUVG+K~`kcD-?9z%bIxKMl{TG05^=Ms7?oE$G%$6t(g5s+uFD|EMZ_38n-}Tq*%}nkZL}TKg@N2fd0p-v19ndct?N>!pbn90{BT5 zWL$FkL^BJ2Aj2p;j9v|^)~PNFA>SX0udDYZFN^hp_PNV?I88HG;@bndSCabPZS)5y zVEM5139K|gRy?*&!8p;Dqu)IU(`$^J-|v3npfPuJH5{XEB9E^6mUlFK)|9JHF=KE- zpIXk#Pi72uOK1+;0B`mqSO2n)r(;M$7R_+#`UO4!I79BU1N`bSQv8&F2+PXSgB0MjuTjx z?d9>s!#wCGN*#N5wuVZ}hpW3Z3`zN_?3a0-xqSik=*FMnjr)$4r42S~IfA*8Jg8F4 z_v)X75N6wk{qh1M`;EYt7esvkC*t(+@jGTZfOUuUKpi^qs05MJ>HWGG=*M?QC=A?v z(71NQ6UkQp(sBa)5wq#UNjC1CZN`s1&+Get)RPNKiFS|OiakA`27hEuW{O%BO(Lr? z(H{T$C1S*rA@w6Xr6zK4&zc2vgDqoZdUff@=haC26?6R%$)7;5h9j(bZt}FzHCxv0 zy&IIs3paXW1Mci7cxz9a_ELquD7qELFElK;^NCB=&DtqE`R`-P&q$z~r`y_Bby)v2Y>I9H{w5WUB=XAN6;Ay6owhceb}e~2zHQ>kUpG^u zmm3Hzlk`Ev8SdX*()u8|fIx+UhJk+tWSl1toR-++HQFJ$&=;KHMM!6<|b>aPg7jjZP^!ISGZcGA5XTcqHrbEWoo3G8>fS z-3|a-Yh#+fywLg)Y1Vqg&H^1vdll~U>sl2JG@4?gN0ioWkTLTJBf&Xt^!&lAzaw*uByH9$O!8$Vt9twJ;4O*mTrrE zh3K#(jlNq@SiF?r?6nq#ks`nvA9bSb1VqKegn6rD%QTjx?$3CSQ=QBmzxALIIaDpI zbh0r7pNf?&?rlzMFL)P_i1eK1*G_y!4}@%&3YpmsQBsoM(8fOw)iPRmgbgB10`^c+ zQf@xHo?Jjr^KghDxO<`!q4w2w!Z=QGHq@_budhL~uXfx&?#YCaO?c*o$I}&ROZ9yr z0ve;ZMh>N{4%??XD$hsza?D7wgj*7W_qmnV`CPL4le+LnE2Tp;!z-T|>+ygL9Aq;` z_nD)pl%?h(yFKQ;SS?ps=@F1tjrnYg2A*9;^-(20kPC@4k6*^kd4=1Y) z8ZR+XSlncF<(Z9`-DS0n+#A*~AjmiSLQWGZvDLCDZKGPDRyG%3o29sEO^Mr+fDoDU z5X?8(Ribl^oeP~s5&?7XM>OXxC0xT?bp{a7GtwAbS^xQ#cPl92tSerDez`pZPgy?z z@KB7rNKd$5#fAw|4l*}i_IaR!p1|EyIBuWh%_qK){dg_@($DtH&yxLFWLB6F!u@-ZkTI)BoK`QhBi!uCn=s4V+>d4fkJ62Ic9$#PWa z67zfN7A$ps08zA2`VMh@FI`t2z9GEaQHcF+y;1RZokbKlShG>#{hgJB(Y~HcL7~ms z_>@YD2}hCUp4v}}S?%Wu-3*1+Fc0wUZynA!J8(9XULXuPX^EiUwlx?oXjCN{sFbJw z&EDOg?~93h`;D=*RnJ~5IM}wX_pfdA!ajG7L{ly#zoWhNh&xtD zOU*%u=!wUAnD{CFF)!fsxyJo>2$e%TowMbW@?-@2xL=#89;eHQwZF^{r$};&=57Ru|JtSlHWUix0!BId%aMI8 zhNB80M<dcU3u5AoTkluQo+3a%q z0T;&=84~EI^HY(MJr=j;)Ooixc=l>PnfftpsQu5gp(nzz8`bfiGI$ALsTzOw*+DT9 z3Eiw_YqEYWJU$2tM=Jvb4WEILfhw+=&M+4RfdqZ-S5amZTe};LX4lb-7gH5ZHGBf4 zgr3Z!FzpPlj+lmKP~qe4QjMKS-sCEggQN2$XR3X~>Xwg0>@;Ocrfyw?mcnLzME6PM zJ}Eg<@V#$G1$1yravH$Qs{RoU2XCLpdY02bl4ktXD&u)AYn*8=FfKr)Dnnwo{l!Zb zwJI0HfA9b@PA@Xk$Eu;&LXXX5t-9;xrkLe-s{_6ZSBZ8dEY_@`|L0(4m<>O7TUakl z=8#PDBLSRC+({m-5iZIbwc$BRn*akis-om(9mHR?Q&QphOE%!->jb|cH!^tWx$2d0 zLfaxPI3ZK|BbSiM^=#y{{#m};r2xp+FF`JJoq5vcXK!9t@F zevf*VkJZDvyZpBTT<}E1+j1pGCL|8ud}PeOp&Q@iu&&v9{er`Tyo!N*Sn4&4I&jyC z{I9m_;===QKE{7tGSv{fD~)idr>~G1Z>P98x;5$<#-Y~IlO>p=$LK>dJ-8=VH0=CD z&nR3|{%r%`{J;4NXUaC-wOF~%;90@|a&6EuFDvDD^Gyqth)z5cd9kte8-IXr&|0a~Bd=dty@H8zVx{ z3`YI|tF2Qm)6q8Mxcr+))cF0BEiZ>lx&i3LBar+rlGdwM!u0oqE6fz zDY<56rdV~<>>+`BrK2qGhZe#kQAFlez?xnoNl$byJnbD;^gAJ0J?$S6s0iI7Q;So&2{~HLir?y1{b;S!>_&!!NjM19yHZOazB%$!<|d#b784X|$|! zf>N@dkz}q1A43m42ym&-80s6AsJ)_wc<<;G7QIMu^>ZLqqI67SOGZgM9yAvyr?{rY zr#{R;w^1Zo$znL>^*ba?@PMhl;ia=rdjybotETk~*kJT4z_vXo=;Czu;0vEXWh2nZq^KbtEX?~ggPgzoUdtWY@3BMy z>bj*aR&fYl%6aIXn=odQg(GY~eOPz3xLhj4u8{J*wDC-g*Q}UgeZ{VAd$dTSQ_vs# zb0a|;!Md-`hJg=F6Nu0x*e~bs9o2KhcjewzSJ9n!>r0`_3a(Wx`W%|}#||7KjOiD< z!p+goYfaoZP|KbKw7p2bVCq%wl0@wB^GIta7bBjlD(s-pt=ZX}lnH2-AfYy;(dTV| zYC{m7Pn%c-Y?ed&(83oNCg3~DODB)E#Dmy!Z}fg;7kDR$rS!Vah(QSyf$ihH-;JRJ zIMe%5LhtrcB5p+i8;GV5C@k`N0TjQ>a}ATy zE8+E5Xw{;&HaY`~ZVpkHO^v=g@?Vk)YR~tL=y^yBt|~{V?KkUOPB)47m)9GU0A)xu zhxPp)B^?A6n272-4Wk9hP2X&ez0DcGmhDhl$_)y{GEuG&p(!Vn$ZB8yY26$*AHqj$!L1n)B+w8` zt4L7jJ1|YHY=3jwj6Uy`SP)>wd)rK<7PpW60*YZO@Bb?W>t=7R5v?V>+c~iJt?|+=02Yz-^X~ORk5|8yK?x&Vv_G1LgbL$J9%Jzz#M|R3)hb&xh(KA6}M& zVnO7pHKGeRy`dBh!C7o=GQrPz^1ey>TL*87Br~4sFA-&ST>?0JoW9fw1^cV00$@SU z+`0Jmul(FUNIpJTR2sXktxH`B5eu#oNFt0jfjwg;TwB|Mf1%0Wgj^2xq*huel8n)e zPsWJB-IHUt$MYJzmsNnD`pXxxV9B>s>`dzE33+ zCKu5R|M?ftm(0r*1aVkbU-5%paPgOB*pTkw`vB3U5Jgg zI&pwLsxj~)>uQZ;%--*o-5aR=oTr|T+4}XkV3p!-j~=p^owCF(657jq3yphMT6;{@ z$*G(~RVcYbXES)&7IW3Rh#n}zhUAI>*!mM>|ABBaWqHx#Gpu@Nq#4=<{uG}m7C^VLpsDGoHS<@71d zXVI%^;OO8;P*-OqTD=Hgeb(Il6vO}$)5-?Ut9XyQ64S5$_6gV85TbZ8Zd5NnnSmYb4ykFRU8LsBbuUO!RB_Co1N&QbWdSm!YQJlk5{}U22I1W8O?l~MWDR9G#$rA>oWH&1%)5I-)JRKE zC|Nka%7tD=C<;kgxy5pI5)0iAB_BP)J#SNLlN$abxAM(+>y9rfVOgC|w~0Q0BX89} zzOR8~{^g>~wjEWcM{*TE&gz@htd;K|H{0xn8j)l9&?v@u6{wfg9%+`?i%%zos5$r%~3Oeab;;xuHCy z`SQdKcGdh7Dqf?S^3{X)7RjEj=lBFyMRm38Ww4>_rY~M&YPRg^1*~>SJft_G(7H>` z8G%pWYUvPW_c1DAl|H7ES`JcDVNL5n)??jP>@fks+U%si%TVC9@CA4`?+gggTh+=} z6||%`4~b7`&Y56KQCHntMYa)sn+gpwGBpsv1Y6!qBU}lIj?Bvg6rY^ zTaV6DUB^Bl@}gC2aX%FO0L(_vPY#h|xGM(V4;J2~7N?7dta^IMFjyl#MKuE$P0$?; z=)*l}vGKyAu*Vm-TeQ3p-4he$Z1A5p`YYG|R@ggEiW-4)Ns?G^mbYl`EU}x~?;gd= zh{1BlSW6qc!J6pt)px}6Br};Dev40s|79MB@PF+fZG=4Or@2Jt!iO4@HU)3?!yN;j zYJGW4r)4RWEbfLF57ZV#CKRjoDHW)UlAJ(6ICz-vh2In#m1uv|sPw3j6m1Y2@0vvh zMl`&_@emtukRnWk&F_kdG;`%+HrmwU=z`t8;H%ShK6OkPEaq&pya8*7w+95GVtHI=aFNRHoO9B=rO3IQX1_5VU8apHYeuN zNP*+97JZMM$i*f{2;T~o4rr28y^YK}Wz4E@7FV%8x}XHjWGV250p#?^@l8Vjc1(7m zHoahg{Fo&G$NY+s12rS&e#yHJ@)Xv(T3rUPH|o#}t70+O6Ac8!Aj=X<)^RS$%;w|a z20knxi4z8vJRW$*k(>K1|9f^&Z);*$zbX1l#>l$9(bIHYQTXUr^i!GZU?Ifybn(Wk zig+c($ADfcbl>y=BqJAB!CPl+Qsn7ks0uW>4*T>;;=iyLF9>)r zu`zbK#w8pROqynu@S@F%OcIj!XRQz%9hx02JvtBU&sygEmpxMc%N}pa3i6O_;Md+* zm_02?a}>w)oO#mMY?JlE6cYw=*7*)XuHo08t-Wp?XD2EjlDZA;o1-*2cHw=8p=m5q z#Pjl;FtO(09$-e>LMP|O5U=Bm$dqM!7K%Q~n9eb;d?ng279Pk^buF}eZ`u0m=cjBq z<1w=<21fzr0xhZHuTU~?LPp+EfZ`w?^!8V_`3g@T^}Z_hY{OR)kxyz2#7G-()zu@K zYZ1P_1|7SfxS+qrvfG?q3=Gr9&@>OC=(HwSrnS&F`prEO=+<9aS6)DQLM7X@rNA3K z`_l@V1r%pwbc!<$g!-agE!9;1k*&~Vv8XVG8Ee0$Sv8sD1S{n!%7MS^p#V;I($4?{ zy4~m0L8o-%J4=2cys3BWBpZdR|Jl+@^Q!X1)wDqcP}YiPURwdld_`MfwYm$h=m;_B zR5FU;^`3`ed2&%k)Y<6C&+6_*_r*iTFJ!x%jGt#X$y&H_?N#Fpi>8V#w0=n#j)jt?es8M zqoOCdjHuF@^B9S^g@bQ)=@v@(no;T~e46qmW;dI^1g%)gPrfA8X#bUP`=&xedSz|1 zKg=dD&qdv(#vB-X1N6ZQ$@_T9o#sVMlb3WOX8)K(|BL5tC+P6WY$KqCa{;1R8i#gG zhq74mStq8-D=sP(n%LTf% zB~t)Q;R5i#XK`$ge7D-|@v6ViJUvKnei56n=}lV0%~<_I2izbM(yc+l+OsTdkhKq1 z$+Scu&!3_YiuEMDw`UN51m{Ub#_rtt#SG`#c^uWc81o|s$ zD!geLmRuP?8R!Pp$h&-G08cMEC3_>tQCRj;3bzGCJlu2Cmlj|)_wt8{J&G2L6hr!u zRG%IF6m(zOrCCYor(Ut_N3QS8uch=GZRqTp%;5havyMxGn&9rcoDTa6A(*C~@$3GI z=yo=Q2U&<2VMxuyhx&PjPS55g=Ly0f-v_+E zPBwS4?Y}l~eA$}i1<6l%n zh)0CU`&(=M>f54tDO73c00pSdjLp-^AFRDUtVjnZDV}LnOg(Tlb+0Bd07Y#=!bxg| z;Q^UB9&Tnxg?R%{M!W@)14U(l***IXi=cr~3O&Qc_4cAMnu)@BhwuEg<>+S;RY z+W1z0rWMDl_AD{!fn8Lo_@r3v7EKK$S4PJ6K>0=Qr*Lm@xkNZp(7@)%qDE7$bFwr@ zca-3lBD^_flL$DVs!2H0mX=-7aQXtm=*S)8MO$kEqvpL<5%74r{Oa8AlT-66iky)m zsn5u>1Lk@Op{F&_AU85DG%tFW8Iv`lZ$ezyaKj&hYXugY4Pq0aSzpcy8)wv(j%)pb zjm(D&Jt=2>I9#3>E9TPoH7LR;n>R-{vMbHGL-)GX`RT-h-#T3bSjMqu_F!chF-GJ$ zhc$N~rATxtT)2>`QD;3K?!#B~avt*rGn$aarqzz2{-KhdHYlG?Gd8mP@;Q>6PDHL+ zZ%y}e+t80SqYQBgv}9%4Lz=%jRY{Fj1o;7@1r705aR3_&$ucrdQQAP&&*qq5Ptsf1 zFHoODacY>$z<|t!KOaUj1;Uq!$7A_0h~z1^W;r6acAW}Fg974hStE=E1$;_3pg=|( zckm`_Zp$y()XuffBgr0!a7M(QRNgcV%b#9p)S=_Dk_E4yxa<==yYT}^()A%^{N%eo zIO|1=9X!iz^gsF@V1d@+N-eNmfY+guNqn1%K!M=#(LsQK)5o<5guVPDX=p0^2K4!3Pl05waS0 zMR=qBb8FY%laMSIF|lq7FlsBS3ENt43b|Y3C-Eevg}?>*q9by9 z(Lma)zjW-D8Vr|2_X}F7bShNqkEJpa0)kkw{vR~&^EC?XO`vSjcj8$m#VTG)e|?3{ zYatlQ;=c0`6XzFd%mA#L7l*=lWvBerCcsII@YmI{SeEa-D9;HNQ2tos=- z!|-Y|`!RRnD%VS+E-m@Pa8@9!wnMFvYi;cjRSXTm{p+@Y-M2m=CraO&5`H1(@c zYtJWKC4n(y^HQ=O?aT~DdJZW;nE?^qa25^rUz=m+PZc-C6IVVp^9F6$V#DcInU)^c zF1XPSRZw{+a2K@gh=D1uvEBV?rDrT?Ki8nHrL~b1zno71oKL@$nfoizGrXxYVoo5z zN}|mX^Fd*}*sD1B>gNWyCO~#Ty8UKuvl`{B;U|2*Tlc`W^_FJ8W01UJ1HJx>V-!LI za7hn>x?r4BePih49SiUlGc>)d63kP7cpHEICzU=07pcC(-}~W@vE^VJ54_i^xFQ68 z>11@Y<}RR_Z6f`2$3S@(f(rQiqNH{p)6ITyEyuI;HSYj-u{zuSCOg z4*cy^%V!G5F+M`AyXM1|n;Oak+2&O)UC>(L2sv&~$TY;~rGdie(d-9FTIr+gW9TPu zK&Jk+A%~u!pRdWW1m18WKKsXws5o*S+ulZ#MkvI&tyhDJ7P9z4I6b@2<$EQNCfnrv z$I*7$b07)+*N8Mur<1&kdb6^B^AXLSW3I4Q(`BKKGI>Dp;OC~mDZakQ7C7S!9ExfT zFFG}Wk-Tmb{>4dbub%rWIquV3xy?}6P;ue zLg(PS)6WkHTzhMN-im5{)X~@D9$QR09FGolCyl*1s{_!249xeF3{~_q4Xm2Vuh5%@ z0TH_&Zak9-?{CLBqmfM146 zBRpyS!$OSxe-+GA9Q&8E3Ljh5#`-ljPW`U^BaJUNk}th|Y|Z;XW(QJkL|xOs5F;_t z=*o|qt5eC5GX5iZzvdS#p~k}n%R=Ria%|8}mOS^HIher|kH+9z7K71+h~ECW{?fuJ zA5eapI-MvjNxy{yp)(FH4>y|bXmz%YGS`8svqnoWhHFw;l_?{`+Cr_pgAV3QIwPn% zKCiZ;tIRks201vK7f?vtZO&%DsnOgJEElba5N2`O)g%_JN_=ljVyMydeWHv`kWh(K zspeHIiSh?L7(>2B)Vs5O$@kz5q0enyKL$h0O|xl6Pi5UHx>c0Dyn6vk5c;m>fq5z~G}=gLqy0b*ReQO>ObfhPe`TIx0;iqwJ(sXYIq!y! zBjfTPL)OYrbb)v)D&_p67hh3q#EOX?uwS471XP2C?^Arp8#Tz_OtY`Rnoa2`cH6rH zCod{Dwx*yuV@K%Hg5wk2r9{@GE^xd@Y_r@3*}1@>GGP2b zUf2SYX48&@DKGCqPyVvmURz2;(W`@WR9>yj;)S+KhzI^bA;t_io)zPKISeh(!!L zk|Ah6dO86E**yxsaSoT0E4D$wWH#*?u7qN`RP~`PN|ngQqhs zZcr7IRf!G%T^ph;M;^bXQ{FLnP{z?BbZ6ccY)$Z0c_ZVL%b>q42>QQA?_KeW%BZnng$eQ&%bRJ^(OsMvx- zc}P4Y>!=OjlDLNM5Et5UCWoIKeXN!A?O(*2C72`^kG%?c1BTpS)ZK;y8Bqdf{F?!_ zRynlYn3K$V`4>iALoYDqrv*^%oq=Z2e7$6C;w(<_!jSGmj_qT{o%Y1nr48|xq_|af z0H2S1Oq*U$LLVa}KjaBC)Q2~6YPQbuEQ zqc|}!j0q+)^V^?^#f52kCXh74-Iifsj4J{MKj6?=0!Amuj?$n+#Nm+{KZ_47ZdOA6 zZmIE>?4lDn$l5P%V%2|CIxzXRbWRdmt>@kK^!y7dl>5H%S8XpKTBK~sqq;?_oG)2O`LU^OMy3-l}!C; znZpYBWAzxTDtKO`h|KH2P&oH^xJdNu>QJaTC#%T z)T941^8$)i<{d#P-d$-z5O+KS!w+^)_osr#A2^`&x(D>+)a%?6q6H-i8nW9`R=~YZ z&pjKiDM>4{Z>>0f{x{{$rS&Pj8~B( zrpDFySL}DB(cI@n>!cvE2v32L0PttVRcrrJc_!_`K{$N`J)EBCaV!97?Sp{SL=GT z$>itC_l-TRFYThc9=__g2ZG6dA~ApZo(yW`9_up*HXdtSVV*7vY?s^J zXQZPU{!yZtXJ)8s4PJR?_n-v3dhyo1mf5&ah}LrX|pH5McP}- zzim=0m)`!~-P6%Zc;a=$Xp292%q{1P1UJ+2p#ItkX_%|bS}ii{N-*Qq$t}y+4Reu- zco10|AyerM`WE1pd6sA9hEa#m>agm6wnzp)2y| zKD+V(<%mhjd%itY87uu7eqa zU)4`BT;9x>KnsaYuw{^sNr^ZaA{&*j8s6WD<7|gWkJuA%qXo(~Yp_^#SQspD z=X5FzPt_uX65dY`%{Cm&D^ICnRDR--8Fl7vgO=vu&O>b&XiUomm_D zF?o@X*L*-otCaDts%Bbzf+0jqnLwjU1qM(~3<+$+=xYoSsDsi^OGe1i1S~nkoeqQ- zelhxV($lfvapO=)#Eu(H&sXmJGk;VEzS+obb#$+5Y}albK!3bMR*!uF!kwfP@FH|{ z!DlrQe=Htcm2bSJLZJ)(c{3h4J3tR=H~HUCE%NF8ez{tUo--(mK#UH{9>jS;Zr-R>uI0dv6=?^?6dOBn*M9DYa}qRK35S zbILtei0v}7UTKfD|0@;5T-CL`D+3PO1-pgqsx9KPY5DeRmPNQ1?MXxNi8M>F@(oot zICYs-(wiX60fu0eLf&Z4u6a3`1i+bw0Dn~w9p5^28=DnnR{k!;06-0`FfY(9NM@f% z06svq61UcfjXoQ1&}p6j(5DBvh}krhsP!2x3@w{RKBk8e#$Y_E*7DZUAOgnc^>K-k zd_`sgD(#-2s!IBUbdLr-Lm@Mm8}5)i{~;w5(BHJQ#hyh|E%5k`wydN4pm(MmdMYL7 zQfN0+F?)`)c}!Wp$h$^%&M2Dd1&ZB37;pJ3Bns-Zh6~mObXR^15z2659rmNdT`|E3 z2&u|$8H=6mXN{>$L=TkD#PH_`#Nnq_W_?vL$j$xY*IbudA2Z6uxzK{uQE#n|eGD<_ zxCNyXdjm--B6QhfN&JwIHKMjM+QZh1(VY(0F3L0J!Q)Mk0`NSt%%kE$!!E5~IwPZA z#%g>;R3ER3A{6E6?AS9=GN;v66^?3rk zD_`^>9v+~bq{W6^-(+z5_A6+~`YS+t#6z#5mP|g>Uph$HGToMa{`2yummbRTQc(rJ z3zwyUI=#Ndm(Qu>33Om}(B18+mwt|ZkShiajRxlrw&BK2Cl;C8-~0w$`Z6<@tNoo5 zyw~yhgcdHWE)`nHq5m;#bpeemAesyz7VD=T{#FouoN#hU1nNJ1ub&qA+60>3r0-={ z1uQ%0mECGMP>>1o88c+XHy4Wv4MpPt`IE;#Q!|iEw9QSw|8iM{JQ+``}QNipqd+S0xgxc(Eg4Ra(ATnx@ z*OBK?{E%x_^^#Y4*Q-wdLo@n}MoJtsZF+1o8aHNElcPyd|)*`L# z9~gjX9srGPf`GKqBk~mwpcASd8m`6QHF6G_`!Sn6JlHjnp3+_cfZV#%A4Vg>~}6ZN>A=TVG%fJ^K#`x=~S z+vPU*MD^{)mGZ^lBOLsEbY|$dk0pxn;*@UTjkga09&tCWJJ|$j`D=OP zxt_v)){CvH9Q9l}S^o}85<8)gB~o1lvqD-hM!SMga45y zSs{8yp)5s`wRqJp=T=h3niteTFPg}3*r=hKq5)_7L)!*P37M*ry?l$i2Qa5+*6Bfj z5^6S-&o%Uh3NWy-vvrtFMNK9zB-%m+8v>%<*2S-I97mpSUkx1N^@ivn>bo;7y{W;&0W^p%la9$~>C`F^> z`-&@s^wjz97OHJs*ka2OcZHUla<&1hv^fKk@OiWm!{>s4a}iQEAJXO?2Ml7@l|KwG zj^E(}z3_j8gb6{Q@B0f0Lu>SBEt`$^430099y1}O&yW^7>ec9&Sxelnjayi@5~!8k z5U<~-ZA)ObnXpzg{>9tyNL#S&#|CO+f+xh00pHW7KArcH1&~=avql|1-boy~g2|a> z_i51IKBq3uRp;>`nV8*#7fX-z65p0#Nae<(&)g1 zyoODj^wkARqKt&1bz#t3nrCht*H}H+n{fEobi7nb+rm`%J0PEUs53>@xlHzo9sIra zeoa)@hkN25F?PGI0?x4svono*+o=l^cOmNu%2nt)_hk8@!wl(j6-)nV%j1mY&%^O; zKZ*6$w34hwlY@i>SN8UBB|4N85A*Jn&`C2L$QCk+^%TV`!hW>?$kzGj<6!FeOy9s2 zN=?8C1Mv;YZ;7^`gnRMfgnv|KQnK!JaSgf71awyVT9U^tUU@xBsQfr|3~u2s_LPW4 zPzVZNFBut-jaAKNvJ$yH!7Sh|K-p1#!EP4-r^qfmA3H_HV$gUx^D{3ZrJH+AWyLPI zA`Ao15RKm@BFAyPZ~hhKk8Nfr-}0iCYgbep3zd)u-j<#NI{<;%4N8ZqLwbYHjKEh) z*U1b9lJw&H3mV*l0(E|t-Suhh3XcyHu6(mm!tj9ov*eH2)-si}4qa*2K7Ecgd zie4r6I`5=#)*=S7Hex(ZsT$|Vg&LX73AYqiN-;^#(`6tCJ1Cf(58FsO_H^&P!6z)$ ze341;p@1lDGfee_)qp?u^>N%i6Dj__{IJMNhUHPVCAYOt9*scCiT7T5F{#ro4QaE2 zC;cXF<9R+zb<64~6xSU<$Dn(0Zj%+d$}YO8!g_bjl|dpkkS(NJ&)3?o=1gR~>O{ZU zS~2uVTTG)$NB=)Eb>TI=^2Mp$K{el#44cSa{c~k;C+YLWml}&_Pj*If)adFLR?i1R zt26DHpe%>XO(O#1@e{zEVgXNVrVpK7R5 zeU6w6%M|O5;}8umZQcLPKe+c4Ltj6i2o@z8RbZn0q4TmLDSYv6y{n9z=-rRlYxnL*+0JX~(HM#a%i& zX)Uy-eIC)xkG?h+Y|j-3h`}WiFkE~!;x6ox6+BRZbxkF9ON^j|EC_)u;K+`8Aiv2s z@|ze7p>@ey>+O$YTw$8GTSNRk{?!@?*ky3OM14tNz_aBjO*0(}0n}6TKq% z*94hzGtVm&4A?(|l_+Sp)-PAF0owbN-GN3%`3wI4Cu^rE7BtjY$FDQ*Y^vv-Q33Ch zq`mCzE~Y!3OUnrGoV=mb7<`p-j!9;rf_l~m`y(WmApd%b~}B3%;E z`ww!VI2&EY+9pFzId@OeDAvLGw3z#u-GldFT$V)IJU!Ou&9!nLHJJwbLiTM9N;Ifh zg}a{&P_KW#W{5Z9(Vv}!TpdgDA%I`;+TR*Pj8WH!-Dacm9cg%7U3-Jn(l|rAi9nES z={;+Lo&fG72YAc-Hlg{rn5q}JSG0g?aK^gRk31%yR-UmMS5PsN8(y42ExXci(2rql zn%`($qog6RAeZSSB@$Kp ziLjGTr`&Ebe&llA#^(EOC6{535x)H^lE+Y@b1qO^w(Lrp9qR&7SQ>}T08_=5Z?^27 zE57TN56FMU%(`okNPn;{+jtcsy1u$a;TOO1V-6v_&liKuEmRT0rmLa)m(*3DIYP5M zM>?||d*FaljU}UW9}ueI+j`|P!i<;%8F?5G!|qo?n-lH6VfJbagzoe%yYCD_8n#Gn zc^WlZ>K|>-izb*UuV+xZUo)8q2f%Uu({V`<0v8Ke{*vJhr5@z_>WeMWK%jpW8Z$6) zzN|At-qwU&Rnd-s!a&)8Hay z+_QPZv4mzNM-M=>%uKO426n7_`avKI+eG%fhGA>-*+<*z+?$BUZQ5t-)PrMZj~K{aLfp9KDm z+*J+Xo6#u)gbaWyJ)Zg>Y4o*Hc=2CUb8Hj3GW&}DN*i2AkUbS19Bh4l`IuB#{6mTp z49+jySNYa%N1-~3*{_u~YCe>COyU8x*vRRI8r={aisB)W_O|h}k&^r-KByOL0GT-N zmGwW*AVAd(VV^96Uwx3*D1Yv@&U}Bj!6F9>?rQF3C5t7E6)490sdzPcS`y$k$Cz;t zd7-JTTjtA2-#H4rDfWu{;^^k;u3{7CK8;iH+`>P?wX2rB73bY1g!f6$*_eU{Uy)v4 zQbr@V>0wB|%VB^Hx1whSqe8}P5G69eh6=3-#$Kkt@{P@^Wcw@s2!kL2(X$XKS4(_H zmm&ALbVauf9u2XUs4&+T(0&TJW^ZuR%2}b_z2{_NK*H5ZG1lZVyJ!yJ`r$}yJcB*n zv=&YbPN8NYd2;*s)FJ`4hz%pXHD3B=@DapQ`5f4=fZs<*B!B4ix%KDxn*F!vJUtCm z{MG4R0eAnvnCTl@MaU$Zx$>9rKMSjR)0Ns9?e88}Dz&Dj@Msv-#Te#4jI|#uE(9~s z@LE*!Xx=slx3Z=+qz=*yqraVCh5R7t_Y6oZIJ?Bai!y;EA%Hy`iD*`qt4gEb!~4AB z$#^8#zn!n-Gzyk`NeluE%FsqPmY>R>7o`H7JFNE0XjQE4LsrqphZWVD;41IEs^Ina zcrSIcXO@y9`XhgSZhL#DNGJBAc11U^ZP%Xn$V9O)ER1~yA#Fi4Bp;fDbiOjty)uyk z={_ovq5^Jj8L$b3!b%q6Wb8K~rHVh2rD&2y5iPr`qsF@WjuJGKC6l13YaM58#Z*=d zR4b_Sa%df1{cpcU0**Js8`{+jVQx|p81lCOMOckF;wECF1f~WbU8Vv@HN?r8B^C~? z_VtfjY{cW72EL?69Sm4PU!yo@164Ti{~uRp85PwRwtX6gc0h9I5k~3mt`TVvq(r(q z1?ldTZlqKiq(d6%78oR@I|Rx1;Qx8ode-xm4|5j#>~rtE?|ogr>nU+RYoYJm3uiq) zlKQAtRhj-Hrfuq4)GHkD(1u#;B2OSATiG+s#1}Zs&oKPAVyS2=p55NiESmsF%{8*- zmgM3bESrQ`Ma7g!Z*tH^yM)vkSfTfMYU#rRcEsY?YBVJ8uzTvAC`nUYN0T8i3x)gF5$Me5n^xn$CrG{s=+HDEL zg;Z+UFsz?3lRlo4wu&~KQIqto$gNR#MC^8*(K`3;Lm!Y8=j?Ph$-KM($GBgbiC0H z4OAY8WdG{gi-mQ4pxOq9V%^Q@i?@D$Mev-t$+jft4^dc-hHTluXo29!mL=!4P$VeC z7TN5SNelo}$Lui@p@;>wFLQEj)x}FSQjtT4l$}9EM;~zP#IEtPAD(7-`;O%|qv!up zntp)D-^tPZ&BFXsu4P7?LM72RH2agg85;`Vuahul2)LeV{gV|jQ-Evklu zlQRw}7dvF-OyvbOmk2H7?RIm`<8iL<|ObPw})bbEGefdi=| zegJ(*7{aSomGgWuc1hnjis^l5Zn4CSBSwO`!5D2`pB){?{V4(Mej6DWAzPPkxZPlWChV5Jx6Z_tf(u$HR z8(`Uowm`|JK71}ExMe=Jm}c@KUGJU<=~H88uxKPzvo5S)oE?082jy^LN#0Or^v|!i zcM7~sft28!Ke1j-wo{3Y`eDwbbicyKX-e>LQMx` z!uGbTE=Qbs8Rz~zpXvMxs6_@b8fY9N?KFC5kn0< zUQ|h`Y4F!4Cylq61XvsejX3ZXp@`9o^#N86_C1rJ&R3;WakSN|H*iZ0`?vL{@;`Z0 zKhMH}u<8B1%_4bx^>F$}t%h?Xjw`XooIoAjcLci&%=`+kxdH7gpsG_{;EnXz^1P&{(=S7-PXl0i)ZXWWOe&Cfr45;n^5K{8 zL}&wZgdii9)ghnQTM6UnGdO}U>o>q=gXt1e(-RGaY)S9zv6^P8j9e22hsHPc*)c3$ zdE*sPh{gqLu3o(6dplg4qd8R**`v)3r#*k3;RlhXlqMK&$G^+A5)ADjUEhY}%4N1I z=bs^1Uck(D0ciR*3&3=Cg2IMO=HANO%@J9OT4O~Rx62sU@8I3v@NOhuaf0KN=o9v) zwi`FiV!jeJ?a#!gdEk1IM!+Z&LcjUI^R%L#tNp!6@V?(hi$CtTKgRz!k6zk4K82qB zzI8)4Qdc(+XOpM-@`H4Wnzgp>uEwYXllYwZJBpYmfm8c}HBQ}vb-vSB9*?%gzUhPp zLWnV z8X9YX>8x6_GMm%oC}ThkfK+B4#R<;)4Ye1x zYp}8VKvlUS4q<>hIunirrA!$A;kT5$!A*BTC|;+(_#1&bqk6kb;hYY@prXC8BY=z^ zvNuczO*$4dV11F0HDwxl(sN~~Ijrz(0XLBO#trK3h27hwP^yH%RMa{VvoMc8-SbhFlwL>tP>tbJalM+*vMzp7VJj%p>OU`bjZpaJ^@cCrp{xaWM`BBW#K*A;nasLvTKV=TyvYH})=Yu(0zyloxB zZD#MfA8WcBu+=@3bqwBEEApA?Xu{&M8 z#T$WN>FvK##b~6QTD+K=Rfq2;WZm_d;c&i~H3>ro&avmjn9Y*+`s?=eCo|e`%X(75 zH{xMEQegvGUJG_g`9wY)O9S8cc``2BgN(iTCz@gT2`~>Yw-f2HEc*SgcTiuS_8Y1(Rf3o8*i*x1B&AZ_&`E3KEi@64;<76$ZJhs+J=-Gq3r#!C{ zunv*1|3DN0?jM^IgVL9Dz-0h`DiY3Ux<0^rq6S_2%w9WEW~@gjBZ%(WDj7f{+)G~T zq?sVy`K9y7Kdy@G&}ds`y^J&^Sk4t2x;mz< zjbi?q{6ce$EU{<4bs;YJNVseou&S8J4MH@eyk^Qxqk4jN#^ff)Li^nnLz)tZ#{<3j zor^*AJqB>q3#cw_N3;xI>RwL2Qt8p1y26kM7)geNx_bA;Xf1(dHwYyfaZ zZQckdI~xET*gkELM7)H%r?Y5`(av9)L1G-Pr*bcgio{tBOuHIsgmhM2ICV14pSp_c zOYI5f6XeK`IwWn2k*l*ms+Egnft?jX8IuB@BO#1rh!k5$D^HV==e~5&5W|@bE9$`~ zmT8J`$LdH;shqsD_N+Olg<6*Uq!~x!l`6vnYS!?zhV0xTWoKnIH=-Lz&(L^_abJ1v z^eO%6qj**EOA<`UTK^T0gWfEZMAT1k`fz(r-WP_Mo?~eIzW!5$S)%1PQ(1($DMeEX z+GXQtook-#+RE1&Ou=_EsZKnM2ed8;-eeXZM+Rtre5y`m!CQBOZvRDT^2(O$szE;` zBKVB56`yt_4b>9zS9cf77CWSKVYg-aMtfO<3U~bTJaWe;aC5+g=Lj-d?Dm)B3gQX6 zdJgWlqs!egrqm4*h~`_5%M;s|$(4KuE{n5e(enC_DwlsEhtB$E&XA10rq%zY+~ z|8ayVAUJr&IUR5r!*7^PC>V;a8m_Zf-yE2ve*G}dXgtpgvh z&rtCA``pXKT3}U zA`jwt%ia=5w|&vTT(G>QTQL3L8}#7*G!0n{p36?lISk}FrHA=e;h0^3jJN4l;CVGH_H`@nMxNsu}F*Z+5Dy4XR{Ur$G z--uAE_)(Lje4iYuC(Qr3ixr7pPER*KXZ1Id1#b)d*D)FuR7s+yzh_6R;)`u}`yRVK zeTDBQn=6CbG#@nH3)hp0)o@bZXdT6wRwN9u=PO0BxE#xuxEXWMDGo@hrQy@);3WHV zC5NXVYK!sr*)k^!(x#Nodf8OlS9bFAz7lsz-0F9m84C4%UCt5rIl-hVkWX)5r;jt) z%9;c|SyzTGDwoi2S}q;fClXMPz1DT~=&LIpsiL(%Qv`pr%C|G9{b!#%G|{!uieP_J4xiwz=_6)zQjIWQ@j zJ~Gml^%`SbUntoLT8f45+&$oAcJ*yblv3}vJ`tUy0%6g<+({m2W6h1kPNq4whyT4( zjNZ#3V(=T~f@Z%U$h13MSgZRFfys!T7zR_eNI+D8+tqi*Q<7UQPVxcAA$ z#^~t3J>qk-GyCemuQyt+UL1D>c&KF%p1p%etbcikbho7W4><#v^q>I($cYr$*)HDh z4w>&=jW3-oEUF9D%VITc>ZzQv_GyjvT)%|xD4Ri8V?B(FvYLd=Hu!iWWRxx9Z)W-j zICq$#*G-AO=F}iL;~Lle%`kH4t1>T$K&Ww@-oPgIYc8f+t&+gaXy6px#|=;WnAbQ= zctC2=uBYfg-dmjE_6uC&;zZ{|o$t;I7aQv)To~`56nw2U;q=yYJ?@MiTnfZ5c`!Kr zLi+0{u`hApO8FU}2CI!G#kCjxm5Gm6{qjuHnpX%L{g2(^kMU#LWrNIunyOF9Wg$}T zGJc*(fsf5B;1ufn7huGu%(;gz>PP4K57803zDH|HfpnFr#aQvsh1XD_kM$*(n84i} zk&6mA#1-2#^nYgGlP#3*-DGjvnBZTLcoJQScVZ$kj61((D(lMXlYyOmdpn?9or2Suf@jV8Y7{IVcLYGsG z2V%zx zq=!I=XRZvg_di8BSuG#EKiX$bHEsF+KNG7bZR>g%0IWI|%J~r*VdIo2Gk6!nZVlho zl#{BjSC#5Y89cv?G&OF7-SKOWH#)^C3XtXtzWJya&6#_jxwNyK`)b*+Iqv9P#t;`+ zcu9uRs##5>8Z*YjgU$(X>XVz&`yk}Rvdbt21;7w$38zIX*XRzp3Y%rxt$LB+2`$yO zN>t#|r4mGZWXp&F7D@@IfrPeerC->Q0HLzkTA9*GDzV3@N+q=PS>MnS>SY zXM=?j-nnAcmmPE(KEm#65|YOm5rVENS(v`ju_nu+zLl?G^bOZ^8zes?7PcA$ezh{v z(*x;%^%Q4A%;%TxCtd%UwT`rx&D~xcWVA4ZV>?GgRl)wVdB_edZuBE)s9w6?6jJj6!DQb>?FD@7E*tegu_j2E2?GF~$X}WE z!V&WkfA07J_Vr78GrDueOuzI%BZ+f5Y$tPfqca(v`#DN8`pD|KeizV ziMuOYog2aMS)5a1<~@2F?xj-p`AEKVJJ;d5;EImd(*&c1Z+eis+P_^t~Sndui_(NYuqX+N1W7awWcd*`0lo>@{i$fP8?VSx6u2KdBB zO3cy~W%#AVAax5LpSvnopcp2ATIJMOoC(qgY}nHsVFdWEM&3~h`4YkKT~P(XVh{RZ zTCVB!B@*@|Upn8r`uN5e8-%H~UdwKjE-Bl+!}2Ly8YxehQ659jVQgv$LYveFgMpdgKfV_|-oA;cBM#i;P{r$GdOY>!q$UC!RFy zz-SHPe^(iU_AdbP>}40BXqJeOB$(-T_rl}3(x{Yns(Q)2PpkRkNSkEDpgSGNi)Ua_ zqftu}^=!qPL~t_FoF^U>{|a$Wv6l>}kqtiHRQVO#xkcQ}Bs;Hea=j+<}a~H`x?IRX#rDa1pmsFhRrrOmpLtbir z?YrdkF0nwL_N^N(hR5ucJK^_=6;JhRJq?~6cM}al)7gse zbO84@{K*%baj(ngJi;wDV^5b}BXj1$A*ZEaHT_D*Ij6*RvWo&fQu=f;Jmto(sf{tQ zxkd+VZvDQX5hRZF-Hsg*q?OR3U>zMq6=_^wg7f4}89nU3qU>)`5zi8qN9F zlpkAtUp_D@4#;1-fq7aUjzW(4u&dr;_)30@nob*0z>8SE4-aMuV1chW^l|2baM)$SiG=6Y$^IXEaB6ijwn0*tafPb(cktrqWNO^RjlApKQ{w0u( z=7atL>w~1&n#|nzg%^HrV=P0%K}o`PC6$a5ZS@2im_{@d&B-BO$;vSP!X;*tzL}c6 z*bRFRtN)E*fD6OVh~N+FaK{@aV(ukN{&uwbWiu$WCD1r_ERn!y70Eh@s+9enAu{)^ zgK_q$Y@%w}%o}~cMT-LvxAIhB#{h!S%*>imiESAfoxS66%iPC988@&HL`N(l6dH)h zj-+BV5yp8S5v)HV6`4>KgSbnxV4MPzsBH!?jgOAFD-0P8>o&%!vv&lb zqBi-@oBhm&6_nhSL$LlaZkefqE>wiI&%ud+O?Ya37rB_OM=wai}}BLQgbHc zpkMi((V>y?DV3TD^;0@wbC@#Ud^Xazl8uXDKFm$@X62A?1 zce6~AzKL7u>GLsG8(5c^b!V3%%ZAZhHieim4ZgUy+!SF4*8g*?3zcz>cx7)W z5##?U|GCE54=gYoO-&CyVqq8E?kSWE`)F<;YdEk)9~AL|G2xvl35a%cYAl)Z%xxh> zkSn#Qa$Jy7!nl-b0MCw{!r@3RuqmK;y6yr0Gq2pG@o7`4zf0Vw; zJc-L8PojT2a|#)mpXg?s2#V+Nf>akZf70gNpapLv&-!$@`pX5Op*Vq!IyHaI(pj=? z9Fz6>3YusN0%OhEyxo|9v|$FKo&(9U*B(iN{dk{>N&+tIc;%*0tUW9yI2U6eUF-~` zRkXXdye}+Az0f1*JCt(`WxKMLEJu0e?#IqNbs5J){}3*V$Fv{CV9Wt(Ujvv%C%rW@ z(RSJ;U!yXC0;%<7x2bX@0~`qS>y_h+l!e-6$RD;;CS zpQ3hr8P}OR9_xK{?&F9tz8M7E2H+f%k#zsNhzWpBN39KG)KJBoeYSc|XVm$kp?NrD z&c(7qFfRDXnduIev_h9Gbl_Ou$4)a|!jjtV9;d584NAKZf+l=3*$--cNd~nSj1HFQ zPw3nMJC8hI*%brXT|deLxEwK>?0jPM+woCV0HR7^U3;e`D{jG29lBtwU#zj0L%#bm zE?dF6AKn$%liHJ{sCq9f>{P zs1FA2_37@z2DvEt2;D$m!nCbf%2WJJr{J+e0Hoxv~GzXL_6O;PRKhDWM zTNp{t?k6sbM^6oUIEgCx>7b8XK>N2?W4)oQGz!hq) z0o|*T=I|au{)DOxz^uyp$t-qQjScId>uiO?f-B{!owksmR}!C|4uQNvsB=Az43*en zdWbb9kYaMCSxj%wkzA{xf^~O3ui+DXwO6EBp1-&G0&MORA>+e8I@##(CU7uvo>yh}Ta4<0QdRwMJ zlvjupGEOY=`SC_7dfxJsD}pnlFMz+Y0ZJ?& z!S;Zwvf$lMbmH^(fh;rOobRD>I1qV=gL?>>-HtGg5IpIY_Ah)yrBgy@G8Yd=xtyP5N@e=Xjf?mSQ?wj00RqK< zt*b)V)WGcd2?TtQCC9dAIMp1O$`xtDT1Ym!wJj_XAS34u5Zc`eaX_Qjs*86hc5AnU zBL|eMiAn>AHMTJE4nYYiDO-QZNgTPscQu40n2KG~M>1$*?htZb#&y(h4F>3jM z^VQAQBWX9q(G_Pdow;g}(*!@SBpif^@;QIHbao)I7oz)*dfx$&IN8V)pB^G1Sh)INM- z_kl>Ujb}#qLYsvGdrVUk^k(g${(@n#zeUPZ={e;J3T%LKMl$n&9l5+ORnQ^Q|3f&z z(}mr-wq>w=N(Y)^ch1gVQw@r}Pkg+HiPPY0l#r5V-uM_v`eJo|j#!G_9_;w7sx3zdOK#&W)qW zwvGQbI#0FguJZ989mX(`)VHZc2d%!9Au2Y3g-2`(AXKR#7_Qa{BuZ6BBS_YQNQ ztbD?_7cGKdS?W&JG0K~yTx}x+e|lC})v$`xlc;Dtd%3eiPkK&^ycc4j)_Q^l-m2%4 z)f_|Xl{1u{LwsbMeXb4Yc2l%o5f_A8#2qrxt<3@c+}(5A>j?aC`qS*c|LR@wMKx^& z?~be$3AOC=Ti;msqYL2jr!Ngbn7=ZrT=&I+3}huPBYEBgP$kTCWC{R1h0iXJZZH<| zjK~oW-@z-#kQ;pTfroH?I`+cOFYh_L)RqBTe#fV{{}v9QQ~Sw3>qqF}>DfvjPmGL& z_JDqMMM2XYF4*O3L6f9o5_6Fmx6ofGVqOrq9gPA2A}5#$+#eituM^<5wc`-6Us z{uZhaKSQp6T#kzlShXEV5f`B}pgop5sF7zLU}02|NCY_ZJ^LFR1hS{@WJPltCro)WsC9y2=Sf5lXuU(iI4!EPZVz0)qoxEPef` zit=v3pbmhsZA4CWGy;vpAyyNnl&mgfD2=g`?>GH8yY!|h+E{>p{C!)Xj69X4iAfGW zZ%EoN*urr$Y5mxX$UWZmg&aw{Rb2xr3`-v)ZPBIeMvPU{;Dw1{jEAL_tM}YKzhd-} z^h9S>Y4oV+U0O2xt4q8Sp+XWbQD$^wjOmP*|CHn6;W=(D5YL1>i@AtI2R-s39%YEf zLl5`t4Xxj#_4mdjdS3L$6Ai|xy|ek3c0MS&1QTc{jS%{l_in2ne*W58cSJYUj2I#w zg;+CJ%iBWJ)h9DPE7sy1u^_MS$AQ@m=Bj?4{vts3x9U7Eq$d~o!6Dhb|1kdFC>GD3 zmzZf^3q{}9n4(0f0wMBT0HDoM=uXiwuBFYE(R|VwySGO^9%s%7%F-G-`8qZq&&kJX zp5^3>%IanOyR9e0@)YuG--mW?qUusi5Re6kJNC>O1U#TbhrB}qUHI{3&D2{rmfi?~ zWu0r7|5Kt+gUK)KIt55!XGdaEd*FeKor=fixuqIuZu!>n5iMNFJ;}liN~^*WNuMqG zc$3ZsO{9_-EkvJI(a)>D4xFWL1Fs2~*K0CF5QSdhVj4fEPCjfVktWvFe6h;RAo`Q{g z;6)^0s8;<*ldJVt?`p-krEco>iR^LQT!qo5#ysF$Rl)@9A90aD6QtV!vIbUvmfRp| z>t0Yt9RJP+XTh|Esz@85l0toM1#QGyD?Ts{q=>(nGq+Xa%vi>B`oRl5{|hcEYE8ax z4L3&0w9?QI=F_%+IrMfq$GyN^Ly8hpFD7mH`~C}|uq61^yi&XV@SzNQjcTu-!%eKjL~>IU--Sw90e?D;XRPTZ-UJMelBfTR_!-~Sqv6H zk41|SQJMtM#Mc0_GdQvrrKLZVoQ!$}F+%?0Eb2N$3R=?Gs^9@wsR5V|ns84&2|ACO zNU*x|9f~IjdgZC@j(xP1Qgi&!ygM-qjm-D6DOmV#1D|CJ^aGxI67;^Y{H5`+JXanc zSe5m#+>=5+{vZ*r;LEWP;o%J{d^7(Pa2V0B<;R$}49YZ=DzQcA9En?V~n zJ&L7LtT%;pC_+%Mi*6g%vahRlCa%xzhE*)Ztvz$8o4w_cM9KD=dvMt~ z!|HW9ZEoU}>K7G|K2*;2DERryIA~9U&SkSD;r@<3l7I6znMb~fKpGgTSr~0d;AJ#P`~_9~^iIRLBj&NCQ;-JMyxxmh)GfnGf2>xYq~p4lO#x^LW&yFRxl3 zpP{%8H-^)`Ail5QitvY`z;$1F8J|iKa_-Z)#6=}IT9S;ojiCbCvMBfpSGI3)WDk3O zoeOi8{GoA)+SgAsz4j`f;xH5P9Qna_!IPudq4wuX1hglk4V{>lZ|k4dr^-%i>6(o; z2am2d!1vFeMXnDQx(EiY3A{&SiAB$n#O8l%Wb!%E*jV@`WwNxUOt-rFdOG(j00}WV zrHkH^;|!qX*#|K9F1GvCt=PAqi`rTs-<3FW@td=sGm?S0-ayZH8j}(rW=YvR3;H$X zM~~C+I~4+UYH3i-NS7}mMkxSt0ZtEURh2q z?7II18aIXh?q_%aw)x|R)bNIe%|oLC4) z;|k5{V2mH%!o+!Nby^tAU+oopp~ z+sPlry)m4=TF02V^sJ>016voWJ`{g=f9JXM162nJI|6(4NmFh;B;iT;a1{qXKY#7r zLd(lk6aC;H8|s+s3{NKUpwUD5Zk!z&=(p5Y1Nk-(gKoeAHJW$SGT&DtBY{41gbkjm z=reQ0cem;n6pt;q2=JZ8w4GRJW+@bM!B3V=%(rUpb1Otd--kys|z{X;#?FNpug& zJ9wiPS<}@>!OKjpqcaB=d~OLXF7!Mqi%2Yo7ZV#5m91*H6w<#)aFx%_F8OB1|MsBY`5AS}@Vb zJ#%%1dq8F&f%BzgyxdwKp^vs`5@V0xEKTB0L1B0hK3T9-rp9q zcK@tS4$sD~m>~OX*}$l_s5d@&U;*iD@@{iqY>r3szlNg)C_}FVG8TP95Tj#-La$JH zH~Q*HXwFKb<4{Th)?G`yJxM?f)KY7ooNL8hxVZ194 zAgB)rQ!@~{9Bxq4vwE#pQE1aA-PL7Qmwtr1Q&9_qqaVY2Drxfh-XS8e0%<=<;Z=T3 z%@KT0Mt`-n+$!m2MiodH`F4Yai^4rQ7N{7sIbpnQy2qQANjDbA# zXq~!o4T<~|=1&%@TqF8&IIBmf^5ej00cowYFIDMAqTa~uMU2y1;IZQShLF5omO@V6 zv%GXK(m>xg%Hl?_t1evMWwXZq_aM9QweCw$z=$(1;>BFxeLDvd`>6;!N-HdqLc`FP zMkJ9ZBh-mWq^=#HXuplIcjQmdL(H8xk%M|F3I*d_TJg6^vvW%)WsGxg-#hCBE>fspHt?^hREk!znj zx8S%9;WC-z(COiZZSKqfqTYZXd-*oYS!;*EuW~8ml7GDJqBZr*i?dLnps#LjEXm|_2Ma=SNXJorb3CFs zaa#MbK@(CcpqUwL-SZpbi@TfgwPWN&Sss&1Cp>f%w*219T4>9rgKNbb(J^9d`&*Ql zeteHQp2r6mk$H5Za*0X!*qizMU6|aB`F_8qZ&+Qm_WtcN+-?*#9)E;?Bx1QZljHuA zNJcI$EnNuFfZ#-8()RE5OR| zeUoGcoS%To@$>8bb?Vq0Y44jTHC%j2$)WVS@@2$fsz3U}8fTu|iF~e9CZcERK7-l_ zlE#Oh;4bZ5=gM9@V1aX#XpInyaNGLHz8X!{>`*wZ2WkW!_yYzdb*N2@=5YyU**zteWmm~V92hFLxkVYV4zta#91p1_rjdDaEzQgc*TBMwf zat~yzvFRV(MH#c6XgsjH)1?VFx6Zks>@!nk` zx}Hb%{;ImiFSAzfF|I(()Oe3|o?|j<%O-^|^!w@LkCDpCu@1iv%je#`9}cC+LiaxE z@<{Y}ZgB3rbe!B4aH~A4r@hbi<#|gX9dLiJr!_kNg(kwYxarPoZ7FLLvG>dFmxD|G zuXnihz1`4JCp}BNRmKcTLz%!*_Lqn*ee6kE-~FdqHV6wilq)FMiGW@$%H^0sdQO8~ zXwZ9Gcr0(^rS`bU6?-CoF&MA?o@ zkf{IFSEDaE*YmVa%@H&*b(v(p#obTs8V8ZP9H!S@)X8@{xMVywza@_<&Ha$*>QLjR z?4%4AM{5nLsC>J-o*BCJo^bHCT%F*}ub;-Ac>^vMu?d6bS6hZ1bZU^CU%>?JwW)ii zga3_FGb&L}eJF}9;_AsUD%3aaz%l|DJ@-*Gg`0GF9I+r6)pjp_N?B%U;ZmhN=DtXT z3F1i|N2|Cm;?*VVSBm8ku(sy4%?9PY38O2pL>t>%pHtHQ=QE)^S=6Td#8AHn%aFf||_4nOv3)`K|Dxcr-Hom@)YCjp+r<`H# zT#$#UJrK?L71ZAP41Qbvv+wjm5P- zCq%YPU}t6g)jsoN^(ZkNQw5iG=9f~X9C>_?l8Mc}uIzgWg~9x9Ghs6N+@(uC{<|Fp z^R!vgi2m*7H&S=sli(7(6UEL5cIw?JYFW3P9;c%MT%>YZse@x_=rFF@%?AntmB)`} z3i7!Yv?4xHZ;uFlLnKces%i6tQtxT2Z(NBAH6yOn{qF_`HQl$bver)L-#{!P1^&(C z=%X$)r;!pGrFcKITT-5@hGcN4kt?%wr->!93E_p)6W!KtI+txkdFVCo>w;Xt5o^?P zQGOQVfmcW`X$P{v%>-Nas*?2ZE#G5K-Og5tM6Efy3+S-r&^oWp%gaEI4im#ZGjhY1AESKUQj%R|oP`u4-z8#s92f^=C zf5u!28bHLKJOUG}Z$0`a81q&`JG5z^^q=#8xTgg#;U!^h+ix*8-0^0L7p2m<#$M(% zIXsOJAxVJm(=Tvrs9TRRgxT?T?0&2dlZ9dlMJ+tA=n{EimDAA3QhH%*8!-L7gW~^6 zRmC2AkdZ1Mvdn?Fesu-$PBS{>HQjbwzSWU3u90k3X%z@>?^h#k5g_dNqYYKGOZC=% zTAqZEnY(w}VEl{aOsjNbJ|Ver4#f1@$xh1~iHn-AOlY)-zqDjokyyqp(@r2g6Q zL~J`|0_xx^%S4@h(|q6q%8+;>FmdeiqzG9wD#FWMN@9(y!Jp)AbG+c_#*!1rC~g8^ z%teBDfeAnZG}J}7F<|tIi`bQr*g|@&DL*&xVmd;BmlG;@LGk!@Cfq#ZPx9j93Sijc zg5G60V-|ZIAMVxU!fql8IDW#kgE(+M+A~va#KSv_I=;|NgumkC_Yb@@y3Ij``Z6bC z-CV!S+B`iuB3<7)^hv)G?S@JInKT4eaGJ)T^LqJ^>ef>%spT3Pd z4mUKlmUlJv1+;H*WpMk3&Z5QUUHtYrIh*)HT3ys=<3Si<6t>o1Xc@DE0{&sJqxzSk z4Allt9#lVusg@}kI&0SqYAC)my%mUEm@gS<`(l6}!wX)uA#Z|@=JV8tz3ga`K&}s9 zX;z6rdI*4A>ee4>L_CO{SbWX97ETn;xkqpD955>Ip z+?+P*;sEHnCsceSTIa?3B(2dhPK=y9|5lks2F7q3eCmbOKagW0Ajx)bqQ^1R=p0*2 z*VIWel#XZVzAhSRD$nH&Tq$`7DUn$9izVHq$T0}ap963@ zz=Qa2iMs2mhd4g;NN-ZlMwR zzI{x4VVSL7grRmmQt6sT0oJrtS#AzTV~dgWX0ly8bWUB>>TiZnj49C~XT=5XPr)t> z+3qQmPHfnI?+WN<+PJ2-EEP@&inxx-jU(nFdbK8QcUcBE3u-ObCxo2LoBohCJkysg zV-T0!WA&cM=wyKJpVEQ}>^_cS_E&FKXa%?dmav}-P(pe{9WXq z*Vmt+6d^di*nY22X8mu=WrPR>tz~qJ@#x&3*L)HCHNOV@xh@z2elVXfHe~g^Ly0i! zsOJ80f~eW1%2Mr?3*2EKyLAwCWl?y?Bh-C| zh0YXu^atm^GFH|Xbtm;?t>SgroOHp!okIUS zbwc^s9e=pMoB&fIrSusCzc`hwOVNj0>eSeJvX14Z;fr4Jt%=spaXmg2;Uo1zk^y>q zKH|DIqQQKT1`%Rbw z+5RksjUYHI)10gHK1c4d(HEL^i+iD6-r2NwCwPBLSRRl?yHqewzCsQq`AS#P2xz_3 zBArG%B+1muW3G8Ql6+;$ z^3>>g6L4B{Gxsl1jV}zJMEMXIv6k_jUKgt)cyh8?c6Hq{;DXF~S2z;nv!F!ID&!l3 zLbSEE&Rq9SPj1V;Py-$D`#ebi$elg-Nwf2B1Mye_LvjOJ0}Cg#LOhml5;>x;{QRz< z8Vu4bUn|ritYo(8u|4( z`85;brn^s~W`>pAk)w-}JaaGd&-_3m-zm0C=TsGj-d6R2#xcG;tsCWvmT@G=cT2N> z`TV{3IRo;BSl#SBuXEH5_p!Dv69?eB-A3rg(B#S-YLDf)B$<~~EKY<$=KCg^r+fh< z0YfH~K)JNa*np z&0y3;H1PCLkjDt9S=(+R(0d;+Xf0H2Wd(Jz+NNP~{*b~0{~%>4js#_iQ+X|rLk`@z z^G%b=3h;4(?CI{`rBBRF=;^~U%u4*O?|5C+fyd!V(;3iY}-ze#!c1e&HizXIM4hypJYTZMCkE z&As$F8E4$HP|N&GU(#5)gD2@S~<-MBSfQn*duTldX7(<8l=dW zAfp@e-}oaf@p8T*^05rO5n7mWrYN#{tm8_<1xQ`E95IK_{R+--lG@}ztP;N@TH*{; z&CytEsO51gFvpFrh`~S7IqbKR$1656VU5lttj&f}-=8+X^sKMuw^0!Yo*0U(rnDtdiA5iM?=pKQ^!Ps_{soX);yBnY*rhuvV5m|@XL%DAm3)t3|O2a zp;kKb@r_0h5FSPLW+-J2Ww`}m5e6b`)_kdTcw~7rsj=TcZY{&UB=rCB^wnWazu)_G z=a@8%mdcfAe#h0W2RmAXPY4sUj=vW$lNZ{7^G=dXG~Y*WDqKeoWD)EUAqA9lF$0#&9+^c ztGj)~{giZKSFU-=vLFkEe_EBU*q!YAUiH7&U(tKSMra7ssBP+v&Ck7(KlpQNy_*3{ zzgoiuFmN>89^T$K@$n`=BUi+oM%JwziO3xK!>5>IuPUOvUecvAubnLtV42Iyb zQc2;h1gbh6+0>R4xZFVhr}A7efo#1?gZBt4gskDCSK5zXlOsuFBIPB2`4l8obXY0` zt=RI$J27P_66WEDV`61cp3NU4f!$>B=5ry<*L;g6>jZ7gl9~9i-mK1fLLU1t6ZJL)zneeIo%8m@ zBa-KY(gxmSCQKHimRe!}5lImG^Lxs}=;6aLo|>2b`%$T4%K+Kg(PXwzVY_FfZqavQ z3y_>NfZ{9(wrC7=j2YRwfzm9D>T_RMeo?p&lenF$_XnevsO-|bp^Uh1367nfbmCHj z>5ZIUigZ@Fd>y2o(7rZpN+6?7bWA(sE*r3iCSA*j`#xDs`-uDRMUb>>JZ>a1J@5PP z1*jdv?1cIq3U`dnA1t*tz;NZ%s{4B=9Mwtb1UV2Y1&xOuBI>vZR~wMayjfRX9zAJj zh237JTa~{GV4`{GtHi;_?%yg3m@95=X>QhK6H&CZxVa}E_K7YPo-WQDi5)@6V}*#e zBb2OUV9pLwy6J9C*bh$7X>bJZJ`7HfV`SQy3cDa_)7bGHA{!FsXm?kERJNrSG#yoq zm|3e-<=^o9X0G}8Ikoc}J=>BW9ULejp@`=Q?_;KehSyA(M{Kcf4DXL}y`@;fF3G9~##VQZy#C!-e zW?|Wav^}@6I)h^1cVbV=F?dQpI^sSKtmOoSyH(V0SC2n6;ZD&3Wrh7d{w*|f4`z5o zt>a679z4s1|M#mgHd{CU)Q}=kp<;&2G6a%hEfogbl>F`*}0Vu$eJTicF7>%lX`B3^=M9@PWmF21onmKNA z3Cdal1szZ=mzGwOaV>Il^prvFER_3cOD2G4UTgS}l3wvP*PtIRhb}kj%cfoH8yc81 ze>8xk1`-8-@BiJCypRA*p%wK)q*nN!HnN8c!Zg}i1J7pk*fH57_tFOu0q(h}j0H;5 zzE_$?j(^L7@WuB!hV>bW81X?PGdonux>J~^t1^q%pdD+I-emD@4SLQXbh}}=-|~t~`uK-jJN{>c8=x(<=qPpOF*M<^x%c#PT+q$%a6qXP}j3-M$C^I^Vi91 zRK0%+*q);^uie`)hOdI&aOD>8L$dt>hD759+*>ko*m|0jzLLa8T7-6ct$cgxqcFcW zL-rK>I`WL}b@;~wvcPLZ+XlCtaxAzVAkTAdu?BG|x$^1khc-|x`n`Ffj}5!iyCaC| z%15|AurBP_(oe68GI-AmnbMQrn%5vklNYPxe)oN1eBNA#4axlQi>~>}OsA^eNj<0; zk*`4rF3`7cgv6|1)kF9Tnp+Sqb7Bf3a*Mpdb8(9#>lGzjpb|yXAJ+hM>PA#$+$$1I zziR=OzA@c5c7+*uHy8VU9@Ta4$>3!p!S`2mXQga7o%(2Ja`ZH%Lv|P#M3%d0fqe)p z_@*Xhh0*(iY?CAYI3@9x2T44eUwZqf5(tXIk#eJHGvB0=EE8y#ckm>1_06(xnQi`E z(r%Yh?|D>D*>6Mdg~vbL1>hN(_8>w8qQx!iMxF8Tb4_}u09m5v^I6!Sd8ubai-5!| zubz|`p!>qfzMW0I@#AdLMbV+r6d-kPGdTP$9&tND39AgI<$XI(VQkb-{C|Iq^?!81 zpvhufIT2qJCz^1ZIm`Y2Fz;`wc&s0`roqeag;oTFKqVd7;~BJkvFU4kx8w!<5KZFG zJ*ZLz$Yma`zCXAOGVu|UH#)AZqRKO43MY0k<99uf_9CNHMHb7NgUL^$=;#YQ17=WZwekcx1re+#N zSIirn|M$1l0Y8rgi$ov0*#e+jFrf{_EPY2mO#aW@pq_g={7gQ@;?*x)AJ{X}(K~h1 z#s5oP*`iv67gC)?-C8pRZY@|n4aBm+N1Lo)+lEd z`G(xyRm7Hvl7c;1CXB6};>W%wzv3zVQ&r&gKBn?qcf?2STT{_?951N5iKLZ{7!tA3 z$j5Ykc{Qvtj%?SxW;MRi!l{+?q;%&*Z*Y_g2cS+FR4Z6W zg=tE<;-^7*UK!#A*AY&%Y)ov`pfxGNH#r5x@pnO}f@=kNeqnL~q^Mw%c9ru`)U17- zGGVQSp*PjAaQBoQQzgroOLgZ`$9p5DLokK$nGc+?U-k} zKk{Ri5o`x63Sf_?8~viFysM3T!Cn;T@@#EW#PhcIrf*fjujlvQgcFwY>48|phx$B3 zLxYWT7JpP@K`N97L({0Q5Y1jdlUBC5y zT_oHSU2OXC%o337D@NlUmoxV1$o^5{fe_M$=Yf*T{)NEKY*Nvu9JcP<&VT9kDA6my zYsbcZ5v|-#;v~z#R>4)V=!<`f<-4Bx9}VI_)7`@*!QOqo8m${ZEL@>D3_Gm2F%g(6 zCF{`0{~82o5RSz4%ZPT=$M$HtGka!n3ZqcY!Cx9a3|rphpZI?J>|;uVZ=cblT^Dd; zwswRF$J{3SO{f81e$lQEA3C2}FXDr(x8IyVY-KEZO@&`WsMraZ!q9#^W}v5ewUp0N z1eIv6Nq8jb8M#iC;E3Njc?szKelx`D?T&lMW!zg-Gl{*l3O-US>yuU5aCHE^cB$;s zRrf5h(A-HGd_sDB&3V7>SSF>wD+}?YX+lhbq|(L!)zG{D(ccvHw>(IA*^((m#K1yrd)LeEDL0z8 z56c~||I#@-zI-#ZEomow`{^q=2HUK(-xF0KJ_Ga@$A%Y^FVl-7Z5H(wuR!rnyZOY^ zfL8U<3bxG~EdJ4>kW!t^mlYKMR5te&bxq_Yx~esiNQ@dp0(vd(>6B0= zYIG0Ux=uM3mKp_H5e*CAuHb;^R&qQv$(mn_vewxKM*7e3g#z}plu!EBlj}!P@rAc^ zrr4tcp)hs zFAjR=p~)%cQ?_dhWJE_U9jI>*Z&OEGf_%^gi4zOIRs>o>A(@%eR% zWZ`ikkm=C-<)O!4#fSXNb%PWvZdRIB|BKv%IHg|u5i&zc@h_4-ABd$={rjGAI~wv3&zQt6OrTL8R$fZ!{snPAmH1P*MAWnlAV2SvPqm|{)@j!hQ0?Qx zXMv}@v%0qHV$kO4mhBe^1D$hGe^UWe+WxHZo`isQdJOxjkvDnMBR;JiTMi?$E;*>< z*J3#d!@)O6IiK<55TKEN8Tz6rJmQ%!GBbViHfwg5V{ncJ=^7UpbIuZvG&QpHj-Ug* zvx57mr;>F_L~n@BkF=y>NsgePUPf%l>h-dP`}8Yh<0(@ZMZ9GqGtT~|3$H6fys!oO z`!LNScg5Qp9q3ha0ahlM4!~I9$s`Ly8WZsQ_r8ej)HhZ?Vu{L(ylMlMo?{+TdkS7S z`t8yFhraH+TZ{J!-n%(mr;;z(t$e^Z6zj)zNtm%Gwe)hS#fwP@u`)hi8Imn&0 zH~%%Cr_pfZ>v4&y5u*7#8<60o>WmdhRd3g>{Zes{XCH5F^GN6HAC?MB>vrIE6o1f< zo;HprU7NKU5?uPs0HPi&dNi)NIwKX`W26HjG{UY2GJ&d+$Q_K%t;k?hFr5@@g3+rP zpXMtsOm%>a+&^)_;wjM*Pl2Guh}v`3CAvcsBgS+wFHp?!GdY><2S5tSoF^FOHL|3$8I1itwyMfOV1>ei66c3bS;E zUTkNZu$yLB_v6G&gn5{_acUSHEz2y4Gfuq?LjsLLNZ*3|PLEx17!Fo4j1FQ*uHqPO zZ5>Y=<%$`Z*z%24gy^s4Q-_38oy!!5K6V27goBDDip-3UOh>xP2AdgekCt%$jx7GxYk*z8!>m2!+G~qnS@Bk6zT8> zy{Y(nj*1~4$E1!_F*DkX&m4RmX>C3zVoUg9U@~EM9n$IexAGqMvlIRAb5OmBWftV`7z+*+=)}_xoijYN0e6K zKNZd1|0T7|44K4P+9Tko%eC*F4Nx)Fr_(zON3uUA|HS~DyGVinO~=uVl??34m7}4Y z1J$a=`g<@wN*g%_ZOEP)Gc)a-4bjDR4bbt0#M~1j0-`1%V#n{+2s_W1LwiE9j87(;WP&6b$=f zZ@mn>^t$+*W07EpNm@RgAJrW0BzGL1n#n?U>u5ygNMylq@aS3cNUaQdyH2P z6k^G$a*=3r-LCOlrSlfLE)IrR7tgo@dJy0MDmHcBg z)#AvYK>31XPz^Uc9hkQB)LNcFm~v~9GJ&^QPc6~{nWxj@1l&>5FX?#pJM%>Y`6Fbh zU*~ynJB1K&L_5xH!B&~&k!C8@(?rR1e$G5cyBh80#-a2Ac#p!n%8x?W{B z=;$(62>9^R7NKn8vp;vbcNf;t_UQ+y_Ohw_X|o2oJr%FvLT~7hJ%I*Ei-j7$sN^qh zT{8|g!3a1|HbtQm;M}%QJY$XHST$SZ_T^S5+S%yXh>|O5jn3+OP|wAdFpHzMgwP$6 zKzuGs;pQPdFlT{S=S?l#J!YYM;9D-rG+qhO*&o3oYY#PpEjAuCeMWMcQn{1lV_)D_ zN-cfJZ98mB-Ajxt+oLV0XFK&XKh#B>e8^h}rYbA{MIYxWg#GMqW_vD*W zS_zzPQe%QrF{-(X^(8?z^YFcdE#bK=9bdGh5XvzH_ z_7im1Qxk2%Dr35lB!1lSA5#Scfzhd;?1b7nyWw-?)SX);!y?IkBj^!03P_VzTJEtZ zgo`ArQ-y^2Hhk3|004Na9l)A7fpo(!)ecX`&o=rOS>y75~)$E4ogW>jQyS_HQLm- zEw2ie%GKKTWt&(E5`A&R^^}s|s?MVrifMOQmKm31{~*0CzDlbO zoxbVKbn)pL1Zkh^ZSIe`uV?_ql@En=^qM1y<3`ch&Yjah}ybn+-F{R@=UCYIa_*^8hn){?%IC~%!=sg(`8s|3q zSX%T5$j_~}urhN)!$MX6tLdeR+zeGa_CI=LI{Pu*uD5k7kIP{xBeLT1vo%Q%d@|`q zDWM;rLIw9$pRV#QJNN6klT&_(w>D3-F2@ZuEZfS2SSRPh~^ALxBD@8^<30ls-NN8Iz^>$|~xrOBxBK@fZE)C7xDfNKV1wjrk zQHNbne1mVlop3EYDHpVvyOF@kr+ZW_dn1XLbKjBA9^}t+$TlbfUk^|lpJY!H-Qiq+ z2O)q>wO5kWg^cr2JUJo~bVAO?xyk77+V(URiQCz(x8m5|v_etAP>7xXzOsC3w@oACegm{P4uO;#5Ma}dxLJK~| z^w=4ukNdqM8d>5CTpocB`y{p>mh-ih0Z!~;I}ld0SXD&eUA0u9k(H-sHOyyR=-4L< z137o+s6MqS!VfbLg8kP&lYGBZ+cMq-$a#3$xH5HEzu$Z&#lW?7?dO+u;p4WU_Ol=Q zHxsYLb4slAR-*DMhIv|3ykOrVWho2=$YZIE)yI-oURXV$nde9?)K}DYocnd@mCB4- zhg6dJw0?vlgwi@RB?oDcj?WbbIG2`Z+DHMmBFZFY4A2Tl`qrt`-5P_lWByx@{Y~dd zZvG3u~SC}GH?|T)UI1<3i1#O8Km8~ zN<5XvkbG(yekP5wka4{2w`p<4ZtM)q+VYJ5Rmy~by}kQfPZQ^iRcj^kb?{c`QYL}WIz znGEF@D7VMM0}X`*mrbZY*Rol(!ou1HST@+cX+C~;zvMNeaS%GYxC%f=q$#z>HM?14 z%_$#5-%K!{(OS9;ifA!;dtl}~LT?7HIE_IKP+UOKw9}KGCz=3kDL>BBojeLSSrzO8 z#+xse{;H^!6&yMZSHu*O-qdhZ7^}0Z^Czd)E*SdBxRc{Ekl^b z%hzVKY@5kDnaL};@7I(zG|F6OzyH#z$@iSFoBckU&Swu0UPIBx(u?=~nx4+Ow5)+; zqm@DTz7*Cy^t&x!JW_p3bUfP!gK&1nkFE{upjJ4wcMPwj9k0^uanWs{dUq&F z>cpQTN88&HDO3$HG~Wv5zSxk$LDgK_?tGwalLsQ__R4w{pry-i4K zeCL!JYKNg2q_vGTdO1|MJF?*mi`}72UT=T^)-K%lG`PmC*+))p@>zN%)*`0SeDk-; zkr)EDO*wh0$}3?Y!?m_8WoHTJwx>F8Rel&&S8+r8oH9?{3%s!ZJ8Pj$(+MRPB8>Ue zQ;E{ZoSaRy*?PgdG5aL#$>ODS*%5T{*rl;!d2EN5<4P|Bx8Z5Oj>4eC0FX%2WSOkY zJ2e;WGoNn?j;eD3&BW;nyOD_Xa!2C8wnzitY0StxLlI^46i}K9{}omLO}i_2e^f%* zFj?wcOE<454IoY?!&iK!Jjm6a1HJN?#JqT<7Bb)JSH9$vRp}!ff=U z9m8SOJ=s@0>?-#TiVD zeMIu`ZcFZIcC83ym<{K)U@SY>N)Q#pvt}3m57$UFvog<$)sla3WPBQD&i9Sma-k^Z z;+n8vj}RzJQE(_Y_?VT8o(}FB|28)^O+$1m(@oAOz^#b* z<*o3s|Jg;zIY-$*xzW*~l{%Zp^qS*a#+6fyrdOm4^1+!iub$&6e}1qNAILt>ehzWoW|e*gw@D=TSe)ry>tZaRYJhT6m1joa9~62YX(N z(qFj#_wBaD)vIwIMd>boJha^Ue*cOhfvJJJy^Rav(y!)ziT1mEn((AZ{Op|BStu?S zg-1!`j?jUuEHt}{9@airNyaC8rDf|p##r?!rC%E6{zP$;9&i|cX`vwok?d8k@-0X@ z(h`Tkw5R&XJgI_7(5YW>+e)papr(?M%35ek9W@*+_ovdJUa#VEk#TaXnONp!(W z;~gB{`n06M!2N1*J^ZHOULDjOEgc+4*LpP_w^xl3pN}P!vm}KyhlCxs+fsKDO>Y-< zoHzl?JrXHQAlN?zY&+<3Q*xL z3OmV`O<2}=JPL4*TQnQY?HUV(U$3Vr_5#YOo^wa?=h;iFoeb>aEW1He@?E0>IqaAyuJFMoDJ@Vned}_Su;#9CY5v;gqo$-u z={THSH<7hScE)L5^)V+RalM}QN9!F86}vpd72gqGW|>sGI?$ zmO7qm=R%V-I}OkNpZEo!4*+3HR?9%pFLFT0_L!b>)>JPFOpnxfAD*)^S3R+}?|J43 zRV0mM^S)jr7haB>Td`22P8J+z(Wjh7EJ&hg%0_myr2HT-3rIV)k=r+$dLoZs z>iQ@rY#daTN;+O9b0lNUFTCLe49@CWJ~#^-3bi~OZ3>^?^O@erhN+I$9% z;{WvOCuoCN9rq!1F75wMD}1N(=l_S7yZ-6n*-ZtLRzaryk@-*DDr`tLvYCp47RE%~ zPT3Cr_>T0FgPq%U|uEv zZ@g8JiFMAly&kqahO%UsjV>7l@L_8>!C| zPO@~+oi^T9C&P8E(NRvhiX4}`=PeLqb2Ra9Vj5c(6&M*X#d`c2%d%Nr%@dgze`kKm zQQZ+GeV5!z#=miCFFaoMELDEZ96s5ia$d154H@-q4J@4pkJL4#e74-QE4*VkcZ*U} zqm@7X)A3e5x2?ZjSmORQ6H^}9GaG^M9K$VM2hO)e8q0{&h7L(1vz=-K_Ro$g-B7Pe zId4emzc5;xV}0H|1o9PwavijvAUw4Q7elddV%*W@G)A6wzdkh=a^hp21 z{QiKd30Fa)TU2G8{-VvOxdVA=Fy2xoF{--)nZJ>IUhsfKvP5P#px&h$Nnhj0 zOJp#^0%qh$Xy5 z$YRnExRJ-*p_;bU+TNynUH>2#cK?O8g=D(U=5t}>`&y28I|Jb>O%B7jZyCf*>gA&( zLEXsfbZb*9?O6zE#1&ED&PB#di32Z?;IxpLdVhgjv}&uhM`S6QPd9w=90?@{^=2BY z+!Qw8^y80j_%ZzZYSHeq`wo>VX;)B*UWCE~_&sw#(&$cZc})Q`J=sJ|#_YIsYul^F zQJ^k?h)>HmrIXY*1J42^?1@tA?`n8A$VGJmo7X|QetoEO~T1U%3M*~8=jL9^VOVWvqC_j`%LPM|ngfAp${YbUlpxAWf_0S`Tj z*N@{DuQp!p7PRuA7qJ=);UQMX|L7?vR!@AmQ^G^ILFL(Y!d(H$Ne%r&qtvUP5y$F) zjC$OP6Ns1j%5TCEiy4><$W-3H0b+QQd?)xzM(yD(q$04N0&B<4%z1bQQ)=pwQdQxwp88Pd8w$Hu?a!&o-a%NS+ z3D?@Z0Sc=f6?4DjpVcF_BM03wFrPz_*h7ezxDP2gIYS@~MxwfFa8EZBc4eM~a6b4MXg#R`JHu87)xs&PCUc8dta z%E>DC-UAX?rQbUM0o5j3dB$Z^g^-=8aqn>`oAUyn8}`$&W9PM0U%*Hsnqzjvfiu^E ztjX+*k2{sGM_%M#=gDRc@`I%z`%_`SF6Yf7ZHLm%Au91U$>9Gw5+`Crs<9g zWLXU2U%^K5epBxzMh3me<+d+3vH3ltIu4}uVCKE=><*mUow~~n`DCHwALDSJoWSBd zxxGrgjF`Ep0l)LVZKf0}pSWyI&1nc3plHi@{I~Y`)?et&rVdOM?A^OUZ^ub>-eHTR z0VWdvrvvBI$E`1_DrdM1Ir6|jm%zJw7Y5Vs;mZPk!hZrtX=CMwa{?}h>|WJto|x}q zZ%DAilX8S#6Rp?~gevDaDaOoL;CvT(SAGeUe0+OMr0^7LA+ykqcrMGDRvh#(X6BR| zqy&p2n-5yg0}OZS8d%fE>rXKc_IbDc%E}5uY{}z4-w!W$bPuJWOd9*l=}GbvSdIzu zhcs%qSPb(DZrCmW!}$8ORGxJ49iuUTj-hMn`kr(J?O7GD1VKnyvZ@Fs;)cI{-Y>=k zEzTjwkIwjxO(^P_tI^POVO&MDrL%0`S0M$n?49i}e_YwG`ry$a{PF|C)?pD<3-Tq3 z*u&ce$-o9%&AGe9HHPw|;a&;*m`xXwvrEZ9WdpqDPQgkVRpvACS7Bd#>lFby1(7IL zpr=nIK5f;-}*t-4x(SJSAz_xBd{P@$BJQ&C?vei-hvlE~+1_jX2 zvi|DZUDxe|5cnI+&5ao2Ln^V!KKTG`CkM)^RE?jtk{nH)yvroaI>ZVc{yE(InSI?m zsa&{o(B6B8-B>9Rd5|GLGC1Eas5#Yn%&F;CbJrbp532kzt}>asY|3~vH@r{Vel8K7 zCz0J_!2@fFib5$Ewa=uUtjacT+K+ z^OzZ5Y1O{&dMZM2WifiI=b#Q#?eAF?-F$X6af%>F(>VlnR#rWCO+g{{Um}=3t84Sr zLHc^0;##G9DhyCwe>24aL+cL~g)ou5Awl|aaz63ozl4YcVx)3{-tqm3MD9aH*`)c~ z5I_Xa^fBpEi7+u8vU`U>{=uu#Vjw6DI&OOkZ7Ta#O`tJ$?Dn?Y_%^$YEISL(0Yxskd6O+;04v+Lx$f-eol0qei1yEB|x5$iW*IuxmbQzq|bi<6mCebX$unT1nHHb6yo zaEHf8n<8C4Mv2v(PZ>B3WK}rvH$PBb71DA&F}0+jwK9!P`dHSJ|-1 z^BcSNbJw__VVpXhUBXD&0}7CuWZ3qi#-k z=dK%>E|^am@+%=DVw=hj0rEJB;+im2$1suvx($uFeB}witK50hg5SOkX*c4 z6s@%Bm3(V}W16;H9TxhN=*Y3aSo?HpgHp14dYhqu&!mb}UB^8cSj+Ywnt9pd^fq{b zS~ctK=jVjv+(nC0k^0uQ7z*C0w7u^_pfF3#+Rxr?sykoB#R&WYl3R( z4_HkHL)idVpv#{X-W4VR%{l%9G_ye3qTKj>cIA5=vqri*_q|Gk2TJv=wea6hhXXdK z5=2{xoXu9cNZyZ?!y!jFxy7+#6uBkD9O;VrA?t1H=+^aG^;ekTu$j#@%XayZrq8(i z8d}xpnMX77j7)vH{1tDXVBV~A4{~Tr0wZy-^vroDfRy_i zF?L}*>u$mUE#gqyC+WPjArGI;qI5j zXMj#UcW|xXQWlY@Xa+Pqfz$+0qdH(swT^+~tz3RW$AKa`+QRT!dQ$xzjiPK?=!_zj zYSaf0)rbhKAWXLf1f)-~#UHN0S0VmISaYtV!vU$-cyqa9O5ecl=q4*|;xBC7(F%0u zk;H`i%(T{Wb|SJvA@xUvaPipNO@mdvjS%%$4lM_-Uo&Mo@J(zADewMnyzL}^xxXmH zg)BD|Q|iG;+is=<4#n|;941$W3~f(Lh64a=j#~I;)X=5znCHlbyK@4{rj#H6@0ra$ z38Xh9YmiEaD~kK0mA69uBw*u!^-W*QLyP%Gwmy7iKCMSQnz;^7P&k8^zz5l``*MXT zy$#m820IykF+w{#kM4N05Hs@nAVNDQ)wfiQTs2-KuGR6O2arVOcrru}2b5=eM>gj3 zW2()G!<<`At4v1}^Oqj|2OW{>5>lKx{&|KX*~w=~kl%S6T5!H1f2WWVL3l$!zK9=^3VU<%Z{MbJCpW4`Vt&fU7Z6(4bH}F>(^&rE^VySm0H1!9AFaTejtW zy|77{V>_n_&{L^o!z)P6#<&@+S3Rg}Ky$I_Yek_a;B+>7eV&!t>7&S%<@}N`W@G2+ zWclZpwFph%&>eO&zaWa2Y{hl09N}Y7rkCd(`C*by+h#VjhxFN^_AXTM9ZcykqAUBe z&45*sH9_K(&ns))L|{=UlP8hDtL>A)?pdm@9y{}!9V9OSXuIYkyb|fVFa_Mpr~K!? zuWO&9!SqT``eKP{sTX%EKLpz|)!#JwwF)-v*OsSmYwG1X>XB_W2xU4W0UEBaVpDPE zso2xTM42~E?_4->M+H25%OWF#I~<|{F5wUU#!&s|c7DHjZ;FkSC;kLFg};QZo#YoJ z)6U+N{QLa^e+wMUG{Q7O{l`m-!x{m*tJ51A);7}FL=M#j^C(B9gaa z8k-)%#ioz8Gva7Vj9$*Gy`OMRr-{{^x@9(Y#3UH5hrK(;J-9nm4kfF(zV4gAqct_d z>nu~h6i5wa?8EX$nK=90;L2~!z=BWczGQuNt$3&XmW<2rvEos7-osulKYKcV(&MTZ zGC6>l%bS@~=ZILo1{>b=;_Y73Yn~T$Cs7PHSu`xn{^xhZP+-D8RM5MwUpxI6IN>Xi z5!8lQo!BcF6@VxHdxRsdLSXP0`?w;}Mqe+d-#_P;qu-`=CZeOywA5%ej5&XkhI3R4 zXEzFjoRZKXn1zkIbN@u?3gry+s-Hr|dOjXs&^e+<{9dOn$Ieywm!cUw zg3$Czz4ID7D2H$_B>2bZRpl#h#g#LDR6mQF+u&A+gFhx1qjRX43N>DNrEEsO6Cv-9 z{?6j*s~iTGJstkt9zUaF76qu@!G5ewJQ8We9rLk0dQLtHE_N)vn!gHuG6}NI5RhwA zcrY%z-^Pv6a@M8Pzz}HwDzlhLE}&K z0EJ9ifl4qZ`KDzXqpGalmwm>ykahhjr$77rnAW207s0hWB4FnSDB?^uN!tj<%w#bq ziK-!6BvxSJFAYex3r}VQX0YPM(tWOA2%S>D-SV}ugDW`k+t|&Y4jlu3uSfZ0_`wmS zY`a(?vH10{e3C>-HhU4BBj{L_u4m^;Zie{Z%1I_kurtNHAOs6ANlAG&?8)sR5f*{W zqd|D;|Gx0`&ZD}=rsdSx^aEb`!9K+E^D)~{rBQVs`K-aoE~%dznrk}7aInroarp_8 z7O2{cHJNZ@?jZ|7m=z}#FYFfsZOl)+@ZhC=a)Y?Z1zqJ#43*@#Fc1m3IKW@+MzWqG z$ED+cP%sPjm0gCWx5Px*Os%Yd;{D%od4SB#s63PQ?xIN{Y8F)+_>`aSAJEK}xpsyz|Uq2{Wfwe>z6r$MDUpAZxcmKglFb%fvmT2Aooa%} zL*43eCg8wv4N6HC@S!5gq06C47@GPk$>RO5Oy6d@N|9Mg&l!>Z)!FwMu0uS0z z#FN(wR3|X*Ey)l?8F?*+Z2my#h0(l)g=-g5IoaXcC=n|X-0cia^I@~9}4gtZWW_Tmg?X0%}Jo>sC& zG91yFajHf9pFG6O5Zp_9ONJGVwyC{W7W#X{^x0z^;TZ?Ny{8?`&_0c}QqNM|7dSS8 zf}9>2QHOya-`CJ;Qf+v1d$6xcg`*h*AD2gd_#_uQc^0!gRYTl85+rsxo&^PfUvMTa zWay9{v^@`Yu`M}XJ7W+s{t_7cPJrVLPrv@>_#TM@--*O8*s!nqt6Fs&gIEK>sltq6 z!!sgUF{+Z-E&2!`gkuBp;m{ZC&oMO4q{kFZm1@aRlEQq~rwm?bN%*ZGhmRbf63V(k zcPFXVlq(BPJ|^(u@`jISwe883A!2j*Q`ny;X(t-*n&qlYRpaX#4U?klhWgU`a@& z+d=5@uPa>YLjK>W4W(ulbfxpL8v)}HB(DvVW%T9pF&;y2o%@yS4};DuA(TD2^to(3 zj3hG1gEY;~-&|0rXNu=tqKmtmOe(J2ppo!xY7Lf^c#${44REt#duCkm-FQKcqkU+~ z&NZaK9cTZo=rcziB8q9EF9aIX0)oV*$&4BWdk1CDK_CvpyrWGo&@pgSIg%oi>iNow z5C|nMgu+L9r<%{fgSRx%s{&V#ln&-+d>AQ9)g+5tn)pM1jWh;3xlU0o$~Hq3(|*mC zir0=ddD6#Al|zem`_k4_^jDF*FRl`8%X5|`$lG;~2tqeHk=b6~SU`C9BKZ%RE|!!* zAW8N*9oF#;(uu&1`=5mK2kv|!C@RX}7e4-CxER=1JY823eO9nBASRJNhGpwL?4s#B zmI(G%58(!cAPG4Am=X6I$n2jW(8W-pBG!h}68Xcl{bWL1@@z%@+}z=&rvqYGf7c_t zZUs7pBFb=iE^eNr=(^P8J zuH@$?I9GQ6{&+PQHH-`f zUmy6U$)p#GcpT}~-}#;Q74^5Iiyt>Y-!qL0DyC1Wp7huObDx}`n|xIK8f3*|jw}0$ z%2!B1yaym35bNZ{-5#@1DnVEgb`>=@<3gOLYzAEw9iDf+Qi~AshL~w@S24%O zjx`dW#udBYEd4TQWtzO)-juL`4f~+=dhqweAwA{zWY%#A52>%3%_{C4s}1K;5DXi6 ze%m1By+y?bZ!a$SfyGnIVAyVNS+fMs68F)7EWj75fTVMBgRytPBWjQMl2@{%vlP46 z=t2&e)my#?%i^*`ga_MfTflE#24+yD+s{sw{N+=aWcx8^hH&IU@q>y9a;@)gx?IxkSGp%&-G-V^CejG=!Dm|Lh%+{>9X$t7@FyI;Sd~(Sm|zJewHTsMX3+X zcM+Td-Ch&%yzlIAwf{bgVD+HISup4r6t7lA)`tQ1U)2q`v%3Oy*$X!0oMw5?6phLjy|=?#)=js^a1*64 zjq{wlrsO@JTogEfy%9Qy-%(R}9RshfG#n5lk24~mgkYF~*Br*R@#K?0%k&s%A$z@H3x`8I!WWX}YO z!4yW!VH(Sg?^T4>n>TG$NPaSluKzJ7ETuP->X14lop!UJE#q*#1aP6 z2BM<`rz95&*b%q&Q>0~$pjm?~F@l<$K3L95u10;ML}Vr^vd3nJm+o8?;# zQz}MdNyszNOv_zYV$c?Oq=@igdsv(1#t@&%L{@?cniGS%dmmbf@R5~0sn%IG@a3;- zA1FOP>6eyBt~6HZ6jo}l5q+T;Ng?Uujef0j8&m+8cbso)oy~|Ub2wdz{H$ysv`TMe z-KaL~T1!5ZQZ=!#Pw& ziZUz7%HDg1V;@=B&LJWsWRL8Uair9-M~;ydBJ=n3>izj%ewT|s{dJz_Jf8Q*?S8vm zZ+dKaYORTLvs5AJMD?)feW3P4FFJG6J-)K2!!3Tl;icw;sU@H9i&-xj7v)C)K8)8h zS!Cti=UYi0NAtXYHeZ$)^!^^_O#d|h*E4}+-0wB}ZAe0|`z1Aj`8x_wU{j7m<=?kx zoeY=(`TbN^&p0j+FPXLGhX<{HFE3@vKPh*>dW=udD_c)x60IMLzbn09+7Vs({4arm z<`ghGE^lMd4tdMFyERp4L<6!8*_C|Sk60C7*;OeFWHe&%{aIi3X@-O)2|dA0{f7Y) zegWfTFhrBK$A+U~F5l5Eewjl9u~k-EdFUert;G&6W-4}dag8$AAwVBZ6}u*I z4cnwoGmaXdC6)PhMmFi%m?tUU6#GK1sFRngswZsWLYdVGC-2x?Aar`uVz*fiLw0}* zakc4g2;bb{4`sFPhhgYov7Ylak8}Hmk&L>mBFl(C9x1iucb*ADM^0$;OIaU9on`!A z&tUGJ{t4ZdY`E=nFNe0K=Y8yS*h*xb_Ox*c`Gs(fP?@9DrNZq^@j&LaxsDhy*MDbE zRU%Y!dX7jOV|Ds}-}1lx{PZ`vMi&D33n&UGGzX`r!5f-gJ7W-AZIWf_2Y?-(HwJ!R zW{n;$6t|Gql4;}~M2}MJ(2aZ}o(kE3E?+8REn*`Y?=UK9B)Z06ys^4(ltOR&RV!%S4*)QT z!MU8|El!&^0QEWa^snPH`<`8#;UY_;f!B!*frUUCxs`L%;?s;~{fOmN4()X12Su*^ zvipD>BtYj<_mcKUqGA6bJIAW+lcvJI!&1%(m2dB*9Sx_692ZG9?U<_?>c(WIJs4vzlz0PN3`zh_$Jz+&|8DFRrqbvBUBuuORq5pXBm0`5*8bH{8VipqB$Sl%z3N zCJtp^X&W$WubOk|f|{v!$iZ(KJn43?qnh4?udhn1IoYbUSbLRQ=arvw4!al8ztyMdXl?%k6SrH+idQ>x!!3e6ps_-?j*H0xMln7@!@nfaWH z=Gonf7C_cacLopqlu8}m8IEBBDCDepj7N^Jm>^JP_`hkfcszcLj%J)a@ML0$SV<#~w#8F+nf-)z!Of8{Rb#<$KYOkc@p?N{_89 zYEy0J_7y1TKLZIA{ne9a&(cw*--_=niTyYr#>P$OJQazA?EwFR z*lnF!;}{*v+-TVFblf8TXAq$V4!C0=zA30QX5w7@$yKbb~=9-?eD~j zGI0`u{Jb+A8lTrM#;^H+it2WYhqh%jeiFQ+2rlN<-4Y(TvQ6aV98z*q)U)Omq;|-0 z{?UAX%%oT`#FcYo<|+%UgYlv*9{=^xxXodZQT_3K)W-{wh97G6*7qEK z6N344Q-y-a4oqYx%yKP^q~jozP~grcCCe~+n9aepxbusYf%nJ259j3d^oXqyp`emGbVV{xEv(@tp&K-po1cx#fw>!+E8GP61qCR|FId*r6PR6$y z-DKK2tR5f}_ELjT#;Bg$Tf=}k@hj*(Q<}rqWGnR>U8{(VkjJ%;Jx+|lk(D@VY!(|F zu!BXp5ikBDjvRIPI}Ge%2k9y!f$(w0b>OEHlXA@+SiyAX{R1yZw8RSe4wq9HRcc?; z_Vtd#A`bU<&><|pA2=O^LugSFjft$|s{)fqDn$ZdV~96q(cp0PSBnSTVn!-V9tBIO z{rWt^+gOl~h|H0MDX5?b!?`0i?6+d6 zE9@5nJ_O!ASwgNLRJ!(E2C)V|ktyWplI(rX$(~e5^fNha79D>k7Ow~Nx09Ii6+d1P>s~KtUEU1W)D^4E zf3rYL&mM%fm{p^c`XK!C7?C}%%BRYd!l!}$;Z;sa`VG2IroxnN(^0+5L{Ht0>D3d9 z0vVhbJ#^&EjxXfXAb$1nNcBg|+{cHn6W&WluCGae1>OLRNH(F6%~&K$BfyfKOmd}{ zO;`FWFQcq7Sno3!{3trF=4W<1r-_E>jQjc9&X@bE*<%5FKmW zrBJn=KwB}#G2!}jaZ*j=!>%utf5mEGTk?ow9NeR>#E^D@TX+D?SQJl6YJ~e7zBV$^npwj34TiiAJ~?PUJExWuiT!B3VNP+Opc{Gs#Oq+ z7pMS;nMFyw#w_o`9!FC!jHG>h3S5W_E_g`uPJXA|DUacQLNfRSvLPs-2)*$cBDuDQ zTy-)JZ)GkzF`zqmZjc>zRjnEbpq{z#91Qq?Yb_>r8n@)MpLqjW6sjrVTV-SHn+~T( z8o`M#6#7foLcdbKL-za@$njDjJOsc&w{l25v>m_~0y){2R)5@W34D4?dRcLzy7kYY=B;kI-{D#$7dDXV>b zEr~&iwHui*kTS397TSxLlri$I9;Ae4^gdN$2Mr%pIDJw0I{UE!A85Ncy=jO?BtOn* zY|jgpY7Sp)62$4&o#l(*{T8umOH5!wT|3f!U$*Kt1s=%*;AQ$o*>FlTk`n`^R161# zDVT;H?ur3JN0)voLQ5uM^A`f?pL*?s9V==v)Ieb3JbNW!k#+2Vq2j{nwE67zY2J2J zEZk!hTKtjP>C0wIfiD?wMWiFalqVAco=B-RKZ}7-emr6lJTzohJCV3Bukrdjeee5q z&HIrZnB=@Nx~saJtB9?N8h+zE)WX(?66$34o{U>I!ts5UQCJ-dpGf`eJ--|0ZxV#w z|54+t+(axj_LPXv_=#j|+GY){&QAWC0N^MxFYCSaIi56}%IvV`>|DO8bnDi%4|8L2 zk-JiORa^E}Vm`8w0*X)+>n1|^0p!1#gVvS;&P2+8m!y2MID2WI1aXwh#&>CU`I&V4 z{U=$}!Y#VV8xyHCBLaF(3W8#T(5$Al7(`ZqgF1D$A>@NDHo+2G*W-FM7UWguK=S^k z-65Ht(nyVQdux*COy-K1#$tyv(5pZMR#r^`We$vSB9phgHnMdW%MoM8!@SF&)yQPA zGqbX|G2NluRc=cy%?*N4?$C=_XNiuo>0ZTAhz{mi zrV#Z3#c93FORI#~ywpOSkn`dZR>6#>iB~={vwt~f3e|PaHgv##=9AmxySVC;#;H^f zVyetCT-&l{$@YD1f^YWLRGvo-EhhAWB_}t(tU)WFN1{XUrOny8S!3Hy%Ei9hrdZU} z-va=${G`T__xLxdDYfGlPpEUC!wEq6zoAof&jq@W`O!+nZ;K@!+@1!@rZ@jz7s@Ra+CYiXutI(Nhd5*gsl4K%B{Y>p-kt<}q!mafM&YIy&l;Oc+ zMKjFG?$#Hk40#=^Ies;sOE-kI-0IE42YNX%vA1Sb>eXS1T9LpFa2431a)`3BuZl}3 z$$jo1k-n9fa)%0}&vmub_#hZy0db4XtX$dzr5%EwPJgmXA2}Tr3i%U;xy`T*E#9>A zHY_hX|Jiz{=zTop!QPb#f_QI=mji7}ct7&2WB^z9gT+WajClCVr~8RGi90#G|dRpI8Y3jQVcz2-+V|4R7LBh70k*({##!@D&eA9 z#H@-w@=kVgNp_NjWi9l+?m6wOQRyi_F=c*}`%y7L*&{^HZvM7rpuBkgSc+Q4inIe> zO(^6yp1!&q+MyvJMy1ya8j(h z@SLJbtSqBo{Kor$hpc@J$-M*Y)I@H52smM8(bPEg__5_HZU7mQDu$>5Tq+xnIH>}h z%ITT|T_~Xce`uc8Adj2TwN3@5j7IRx7Ok&n;-?S1F?$t8(rQ2i%B~GeMYC;(~nMC z`7(I^A3fH5Si<~NE$SL4m(1MwoW!^m6B&Kp)w4%|Uf_QiZCq|N|6M1eDowS4k6&W{ zo@5n1_6^Sdd2j>3Y92tMh29O`*E=kswxfA6daS}RrnGLTPMk#aq06!F+|G=$rIb45imXb)%<^ zE+X;H{O5VEuZ8v>md33=l2wyK5B50_yME@1;m?qOES>CMp#fq^lG8R%>_TonxHELG z^ya3t_B(p1#4VIKf7YxkK!J@UO1jdK%r}Y&S|}@@Tb1*;m-K{r^g1eNchVuxBgZ=> zb}LqR-dHB=C~u^djVs23Lg_}_Q1SCv3LNZx&A$W7mrBiiSviTks?q_`zKNF(Oj4l^ zR7sKJH{LWj+7!;!M2TRDN1BA@>88_Ku<^1Y(ZZH%;a+io>mF8{+ zZYa^@!Sn>%C^8O6@QnfW@%S}zFkAJ2or0Fq#wMwg-=pBRsAH6AZ8*M#dF`Ciio_Az zcL3$bT6h7@)cTj0Wa^zO>j@_~MWn4NkVe~~b{gHw7d5J3?hDNX@Z#0q?*I5+Vp?PJ z`YQ()Crnum9)e{_$>19HN|HnCS3*XHQ{ z(X6F`vhYd03x9{Q#G<1`wpBIns>@G%$-rC6&WSIl>zwE|EyH6d6Y##khCErsCbMRW zeF;_$>sf^<%6tptI8rqC&R+dL%6Q`T3fE9Vk#2iv2IMp{_i4PThdk-vgE{oj>cAjz{Vl@tvtdl~7E0cjZ}r%P;UL9vy>6RL{+bn> z;FJ917Z8A=_)#F$@FKEFwTq@p#DQYgwPF2I@mCrkGB5Fn`sRD%H-~QJE-tc%rb`?x zE%)#_5x4;8kFZaej&_>@Pch`_p4_a{g|{kddUQC66-5e3_q@n`1cf)IJAAF zVn0pYnm%ZVhrfaX&p^*zDehAS!meHGFz$6LSpMN9dy=(hIGIjb!sv-zUGMlh`CTV) z&)=6birtRtJzYSi^N_v8z)xgIh-aNI;)3LqK52lk8j5IYWlB?!Xx#?J{1X|fmhCLs zmTen^*Nw)Hg8Axvirn+DY~h-!vQQ4uCikO=e!k-AnKw* z-LpG6LPP^&J{kP4D--Gs(jSm_z`264NB)uCrF1+R52%67e@Q&)kKvMN(%DY!5L5N_ zfpLL6Z$|+e*y~tv#}0)thpxTL-aSffsg8j$4fL6b?X8p~_pMW(NC?q8RDr`7kW6`5=fU(^o$XxMXE`1C`GMcn(l07)gt2FCAy<7lUUzH^GuX z@ry9V1Tde}*KIM)Q?`!AU%s}H3?!@8`$C*?h1j|^S=yx&DOwfUwwOC#wm1IE5(B@Q zL>?wxMslK;i{E#?uR%|e4QUy^ev=!bSU)HN8hv8&xqAM>)|e;t#>ek1P3FIF$GW@L zErjIzT1c5|(^0jshL56~u;D8#u{g_suwd>azJc!{&dnsqeW|E#^sWLP1A;4<-(;U+ldZkJ+cP02(oKWTgEIb(c6Al zk@A$X;Y4`euv{%`YX7g#T^nBTV0#Sw$_X;-q&*ftO(~HS-5Un?xl+F>?L6pM&K=f4 zp<>Vi_c&V(&KQ&3;hON1dm**n`MZ3S6Mk4#U(X;If5MM)`0dg%`l!BgXRPZzZwz3; zTi5(m&i$Njn`nw*&hy=BK`^yq^B*EvE4*SG+#IjyaqCsA{zwe|-h=3b5&ed5iy zGba74!0fF8qkq!pFD(H|(BKm(lO^cViQs_2b7O^$d#|gRjcKrhhrYbOd~CZp_1E6V zkh*6#39Okkrgk|~H5c#*E_X>--h~1J# zK52d4Pwh4yT-HRl+$NK_er5-oH%M4A;%gbH6jJ@0arAcAaA?d(j#9hgs}fLnSIBg4DkC@X%D)Cgpr0*N_{Lo zX&?QWP85oHRFVojo2O&0b%@%1tIHdq()TFVq!COyZL3dKGVY99v-MS2e5BO1|AB#4 zuXX6%=UlMci9M$7(GGdu@n(BF2_pp9CKEA(OXmXt{CdZqmF8GwWM18(GkV+IUL)zm zp89KRPD^vu^7NRK`shtxXCcbQMkhB_4mfUZ4)SzO-x(hOgH^0ydWgxCURDa@F@nq| z&^z@|)f=E_UkMcGAqB8Y(1EobQz{PRV_QLmSvc7fNpolbw+nZ0j5q4$)^o|_4qqad zPhk{fSappMBS90*nqr@_T%qT9z+UZ@w*RVvM@Lw(%;=dtZSzc?+ZRF>E^tOlk9wMW z-EX{KrsXMhdDzhnee~q@LnN>^v$Ry5_)})SA8^=XJ%0tp@)=sz)O;AxZt1f6UCn_`iV`XE7~Bf@*uSZCBS(c(8j6!qg8N zT}QH*=_dOaFg7Mf(~PK&AVBG|ETnVrxe~3kv#zkH=LMUJU0;BhTPQ?WYK}k`zT6%!R1?;)v()-ofN+LR zrtWyC9~aaC>1KM4_!P$pUcoWHBhn+zkQ#&9F;QUo<_0`B zbU+WWK1OTq972^ZPhgq6mGy!0z|5_<{&f$stG!Gwtdk=VT8r@_%m|zvKCgxebeDbj ztw8&FavlCNe!{~zT6ocX1oG+OZ$ z!QE$|hDZM+|330oW+F8PoI}yLs+zKB5O}buzTDu*6hTZx5GDA2oE+n>vh#U zZMjKUztb?gS-Wd5SRsuEl4?sws3Za+pcEx#U4ccu`6a5~4&>tNc@ zc*{vOZCCcS=E&`l0NBJaJL;5I*Fby}v(aI(iqNWaTprt3^K|*ktc1v4Ca2D^(K$F% zs#xkNndI*)CF9W*=usCSwEI>S4ikrIJnrT~J~@D_4Z&q%jw2|^{^pxlR_PS76{)>q z347%gpX-Vv%rFFn^9k&>0a;z#^5}i7#d!V+T^rqvcE>L5jS(GKyoKf&+D_O}ikFv( z_Yn&q^Kpz~?|)wSSqIO!KCkH@=5gaG*o9u<?|O7@gfgMVhIw+Qc-;=eHU?cv z6G@3j^s2#~D+QBW*3un(xx2VQ7O-Kyc6Za6Lx&VfPCo_v5N9-{|HJxsIsL2D@->MH z1_Ds;LlwAUlv;n!ktJ6%zjtO!#T@!FB_$U3>dk}tl|tWRBa7)MJcfCwE!MIkC%?l( zP;_8G3FW+EvU;qyG_7_MJhhg>moUh*d#%b4!Nt$?m8-l)ysz-Df>N2|V-}bD`>7AB zB9FsOmHI*=@Ilu?xv#2XKzxdQ0kGuSs~wvf$05z}(XV>SL)5eaqa#9A@u5s1+nhW6 zN`AU^JKhsLsh(8^YPkzX=MPrQ;=D zZFT>hlC9_~6KsL29Ssb2T(_{cTQlqsj|8>Yem?+J8}3WJ_!K=j&s4A7f0^VM?-vEL z<|CqZo{E10^xl^m%KKr7zG>Tie-!?=tW=zp|Ih}Zo=Fk@@}Ys2fvh%G?@r~{#X_#a z$*rAWIY`$NZ2S5~>}thOUdYcX9*dLoU`&($c0&E*Hn9YdxW`+VsQ*N0?B zB0J(;+c@^`d3=5&0-pD#*!VbL6}P^eZM3p$95%K8;*~6a38KE878Fo> zDZs8;$2*|USz6qz5H!rKus=_{IjY+`;#d#qi*$gk$)!k(-9XcdQDdv)K{79&1^;65>GjUFRNL+c>8AUP)SjDHJrcQe zz4ENP6|EBcM-8zWyR^q!g++m$BhFRek1|nG)W5AYF=e@{=B<&WVL^H|{*`EMy|eCwlKx^-YFs?b<>(bh=W zNBG5;MF&Mn6}Xh{54cPBx58W``zMKhJ@ErmMiF(E7srA*_B=grJOVd-u2E%}&7V;!115}e-Z(bwD^ zYaK6}z!NuV`O!FShloSa`2PdK7fW` z<3UTZY3Z-G8g8&8&S^v(l^)%P6N?=-Fj`?`=l11{7SZm}ivY=I_B&ZekzG#KH?mR&#ja7$CWn(p49EoNnhmYpt~v$S}Q`rKEv1$xF#woGta~ z{y^O#*K>3vsbuJg``)U?c$cpeF%mF*i-)sFcBT`8b1r~qXOkZr<+?l0O*Y>{x(3?_ z#Klpf%47L~vs{ibG<@e!0PO&(P>+Jb)%Pz84ExUI*-E> zAWm$KYq{4V1jm{IH?Y=OIS$?}fw@yvcklI`*I!X_i%Ej1tI*p#lcaefTbka6t3Mmo z>FUu77Z9c+Hl7=|-D*+Co9bwVDxPBHQ*PC}vwE;-@rNEdJxH=m_EQ7w3@^jOcpw!< zi&f6nRL-p_s^`czCzVZ{l8k1h3yU5v9r6CZ{iv>ToP@Duf>4p-Azb(Q>@?O-Dk9l6)RXQGgW&l1#-VNBPgWc^=)1X!Y^?`zr1{o-wfXl@BH zfr!tsLSx5dYkrAS@Z_h?<4EE;tKJg+HI_Jo5>sO#G^`~ z{Ef;%{&S%T z59t)3(i*VqnO1750!H-q)!ak&xm-<|m|RWU7V8zSd7Frfq-oEj6)w&-jaBn( zZGv0czFYbzCXf&DlLzjy3-zw58G9-Aor*3??~Y1MvGe0LlAnLYUZL5=xcC5aq1$*t z$F`E^4^RBAsJT3cLy!HO2=)>ZR^=C;OLBfofHEOb|MymB{I9!&x)p000ddli`oN%)5Em$W;x>ZBFTdCUi- zYwa*EoBknNW4mjuW!Fa8MyHZ2=cO7?D&$zkXV(IVkn=b8Rn=g6hf`EyBp19{3!oja zXTnX}{HLi+bqrL?uh2Iiv__Lm8dr=dtryzBH^pzC_4$@HsY5=PR>Es4SGgyUWhT?2 zo_ZqKAPpW=MDFW5E%Es0%sr~Qfz^eY>EHkkDt2vH{LMFzQoKMost}#J)*f*)nsciyQp4Q*+$#)tYsv;4zxrRh+Z#B>=-# zx+Oy9!Qs86%*f|BNA~pc)SP;$OH*uvC3|VQ`Ar6ZWp6r#a`^L<7XNQ|3xw)e7Ht>l zFKl!Lnkt3bE0n7-kPBIv&S%~!m4J#`JE3$1=Hvk?5y&az)8?w-)5xtk6!7TL2wtAD z9$#6?`}Bu|0UGh+5o|hJQ>#uE<}U2_DsJv$($NujMi^7ZA?-1*ZHe^HGAsj?_#yVU z0p|7#K8&+JR{Lj5v_SSf?}$80a32oQ-*7P@m?aLzW^I}RFj zO_=p}<7p#0@EuY^I;QvfiBZuGDcD;zBCpOsV6rYmXiPdhn%M4haT{7GC#42rJTTc+ z))fHDb_b;qkMnOius)cG>Bq(FEtR(?LOgKPYpjOfj5r8-y_Q#4gt+-tx9<80q<~Hg z5*4DOD@D9VUW;o?b_;+LtD*eEv-BB+R(4&V)#LZn=C;m=i}%k*z6!iW!K3O*oK;I1 ztY}D91BHrZrmHFnsr78uX>W|D2l_E)2qt`LjvukAiyJ$8Oa&}ho9o`TGw);7)HOCA za(J<}gsA}0wn!oBk9JbG=ozF`RJzPdNBW<>EH{5)o437&YqI%6Bo0A*KifAj4~q5T zJ(JyG^A6$MERKvG$2v%VmRUpkomr)i<^6ni>cFnc_4lj#>90&eRh#f_43AjZT0z^$ zCT zcK1Yf7c3j{yz+wHq`ETQ6?uS45l3=AHz+Tvh!9de(m~~rRbfQ@*`%eIc!ozO`D&3^T+`f<&qEwE9TNgqjYy_tlKMCEN zYG|TuI6AN`8GSi`Sd63f^x=RLPE7E1Yu+4+f1CCuC{!XxfEXauBYsbB#7+A7!=z~q z0P4EzO^uI!8ME;={M#eva>Ggi#H$8iZ_2qN2}X>hHF>^Tutsa!1yEB7$r**sectZe zpzKLCSH+|bNdl?LFdMXpeAdfcixSRgaJQXQ%ki_KkWLm{_LKM$o3$(JLLp~-#!efh zBdqq5#yYkGDQJ^zmUY1|qVXa{l1sEX6r3@*N9MwDQwhFG1^r_F{|ylzF=T(B4sSQ_ zsIcp{X2X|WPc9C~Y)=0VeSnXPUG(0@X04tmh43B>R-yH^3ig@6r;7zomYhY>0tuW_2NuLfNMB#kcQv+@1$f zKT}JH))+vB5ruG5y(Y&g`cwGRkl8C|+58L^U2qO{S9Ancv~y)7fl}+=}HJ zpANF7`|3uIva(K6m%af?fUf2}D|TKsQ6lL7IDq%A3^Dn4AjCFa3>_c2R-zEcXZl}8 zAz-4?j~=xg6UhE-H|%Z7jO0uQKXCC$)6IM({g&v>sgFgT2IIjz4a1j4YH$ zas8Jgj&OMf=qj%w64n8E=!2rDPZEyT(?RpM&l6?!|A91t|JW2njlE>Aw&%D;wGO8P zVy&*rr0$bw=)_f6WJ`Zz{!+!Sj=$@k!NDl_J(IzJUz+I!e@MY8%|&aph6FuVxsLI#eVV=tQfp{>Ft{$TYm3JN;aMVfVKRjBjqZ15H3zYii1Qc zOV@{lY>klWe?4(1yC3pPrlL-=e%4rf%dE0KbkFh1QDRA$r~omZag9k+u}r~;?;fT> zV3Mn=aB-AVBV_3VYsfbPVURs?JlE9NN@kA}m?@$xIxjk|ou6&@5VeF=VM9Hc5AxsZ zov7^qnQ?$@*`DC#0FlMW$D$gyMj@$rmF?s>$ zEB^5tcAJR3)_S)iprlSyB-%*_7NZ=0ZRMZ%+>*~xZ{*8F#=-jEfncP;+$M---y&V3 zr~P;IvfqYA3Pq3g?A<169NOXJrExI%reJPsrH#q8lM(b$pVPpUZwPgDY7n?9mGq)X zHM5LoJ{Q+#8bJIwtIYVc4t{JBUuPgINGUFwqQ&Q(Gab(s7PlawOr9tjucM}QSQ3SqLz87w}a8{-_10draw9W=Iby0d;| zE-&<_MR9!r-*vlHXs&%WL4o9+r2b|^-DRBS-G#kz{3id7M)wLM>f3s`jq|l3q>)m5 zHGmCXQknqlem9ZPbrD;8{UP(jy_lxJqNqTkM}zWNopepx6olx8Snp<6xhP7P_eVEc z3~vDFr`7@~JmWqG=icYkb2<6&ekHZFsglR+t?{ODUv-hJ?BlZ>m;TEBc8Pe_l4=Zb zBh_M}sdNI_q`b;X*QJKpz`!2ewQ~&|bk8W4 z@2b@+vIk(lET)M8yHug-uk=|X!qxG3{Iwk!@bIfX#qm-@I%BJQMlUTg)DFnOL9_#f zXEJLKqBs$2F4{2bDUA?a>E~pV=prAM=DTVJfm>82T_(uo(5U6vr_&Ul64#k@jb2Z@ z&H|(xZ83%ddy>r)Xv$WEbP1uwk(_v)>pXrusIbQz!FeCC^rmJkq_uE=y44NAJ7ai) z^Y6i@0zE;dx1wK-MXyk<71Un}V*TyoDZXzDv=X2(IDPU6if}Vv-Tve-l%<>Viq(D_2_aIWTI~BNa;1XiR3;cbs{)=Xp&^usqYAYOX-O^buk^LCYm3- zvoZsDj+oY&$F;B~mONx%)iJVbCfcw!=g@dIQ{!A-=MVNX3}koNXv+C6NY;mPb;6H7 z0hd^i+Vl0cFHIZE!rtOGh|R8Xxh)pM85?%TxXr)3nv6(Bw&rR)i^riRag~MPxJ6_W z*P!ZemkD)qU?=M}*t`wHpQ4}Iz5;O$Bx6sqO55cU>2c3AEt8)RKeaiXz8u0@@@aFv zZ|ab2hMLz=+OdZKD|_&cD1LK!Zje;DJC*%pUH802s_ z_;xeqm=tI%4vyl?btTUO=*WIL@m!zFzpo{BuMophk%e|&^MHNU^C}9V9$rW(YT?!T z*{)$9E#iz!Z%mA?1@c^cS3_P$9`ZBYVMQIOqj2gW4^7Z&&#_C-D*JH3cZQ-5KS+=gshJ<6E(h9R8>!VXahLl*hOrZ;M%Q+TB(F z#^K4X=oCy99NFPj`Nd=_U5VN|G#oT0pSrW8x6GOK^l+d1W6XO=*qcD+kSv2HDWwl) zSEyoL1=x-S^|DYAv7kOfe*SGzeVe~muX~A58FwC;S|&?VLjEyGPX$ zYtvg@S6`cayl&zk-Q6+5N~nG^rdq=AWr$rD;rI#yEa)P%9o+FW^6Ho0Uxz2@PYyqF z0!kSG2O6IOxPI)-EF}RHZU2d70IR0N=fw*hIqg*)T++{m<8|HFaGW&Iw{2YZfnVNb)T^ zY~#8D`>vc~Y3>TC{iHqk{1q}#K7~gEglUJ_h0s`;eU;0)3SW!NGP0<__>Xan6PBe( zP8k&=l8V2Nw<6o7oT{-hdHgLv$bYk}G|9y;z7jf#F|99C0z=7nN6FILA#}BB4Eb4R z$Sqs9vFU~%KCoyG4IkCW#r*t!?X!AFlP2SM)@YrZXZr2}v3>?; znECx;>(^RxG#t!5n~Ygt&$Rs+v#r>Bu-*&CB=mT;Q)r`!X5>6gxjHSf=DTRrqH;)y zvvlO6UrISwfsqcrt?*GR;_~y}=d^V&`%NYz>@?7wR|{xvYkZ+``0W1!Z}>u)=KrP+ zGm zE=)}3G%NznorRT;eAs>~#v)25%Hf6|pZTbdt49Kzx{Zz&nheIdaqkh(MtomuE{rZ@ zJH_aX8}8!`av|T=eYfjDYgLIIq}uj^MXMx4n>Z>B5PN<&mN@^blp|88iAjY5Sp=)y z)a(`7b;LkwK$neiu9F|&LnGT)*F8Jn^o$PzlF$Su*y(kQFK2O}^8wx>`najlNd1A1 zfrq1$Ef)Em8hqV8HMQ|dbpg;rm#}q(W5RkI5U{r}CM>+oT zzdYpu%T6?FH=oA0QyW0=)J-vh(;Ta7CM072@f3}*1&uS&bLAV591SK|RSqSixb@npQaot<@{gA*6@Zo~(Sy15k>!ifgjCMv6 zKpyc}Z+e+}7qB{X)p~t(^v?Bq{>&TW96W4Ez#H;5Bsnhgnj*AP1L~=Mc`XCgEO1z( z{vtQP!P4%}8uJU`vSJoYwVmEWF3Tj~gERM)?o1~=fQ>6fjqKT=8CO+V?oUIkKna|l z&y*P27*ry9Z^|zBuW+}I>k`|sW$V1YYj32et_f=JRsQW#>=klFvHz>F(r3rY{dx4`06rz*%zS4Hys_jvUjN|osT}N_2KGRCWHughu=E|RCCXI?vLz)-_3uxjS1`6Ocp;+|%zV60Lei$?C}$ zmwf3x`i?GK35nXL|dw5k%3_4H_9o*eutiZYsr7spc2e4K-Cl+mcfKZT5 z4dQ+oMeM{_^L?Gj_Iv4K81G7)0RfHc8Nl-K+3DY!;y)Rz{i%Qwj!%iL{_#|)MDbI(;VQzp z_yO$q=f?Ru-%pHE1R-qD7wUE9oU8PSse_At4vA7Ic&{TQ;do;b-Q>$$sx03@B7QCp za%xa2)z7HXzxTK)kkMi=U`BkyNt{e385#9(|Kwf#mUQ8ZYROcOAX8&?0FhYsMJCy! zDZr(`JK2QJc5>`ZxHDhQXCA~0N1El!IksJ&_eS(DO`6=j@9!m-&IgMgegeXtek?Sn zmzN0O&se2>CnP0UO}l>-QR*~j;TCp_{rTzU%@pa0IRs<3X|oo9P`QQNV(gh(o*my; zL^OWpIZyB0bmv=h37R?EV$4yd!-hW~r}EHUoXq!kC8`ohE|S#|{Pxo6$fEJ&mfMuG z?jAdWu+0u;pFqz)rY9@tfIF^tXbD7rJyIp!^y_evS7kakFZnj?a zsr-3+$n167(3|}j7$aeTg5{ll={p$lwSf~AM(Nk0QjC;v(#OHON!P)q+?oWSjhy6+ zr}TQeR`c|tMr5_fVEelBJRQt3FwU~vLM{i{*2q_N^>*>Q(Ac~w^5H|F?}g23uF%?1 zg`clGIa@lf8K<^Je48al9X;9wXUn5~PsLuP25 zpln9!XRJ~ykY{r6)^{JqvY&pZ)XoimqFD40Cj4ud9lixhK~9Dtws0ElE4A#YlRtBlm7w)$lFp2pX%QHItQ zljNCW6Gmyhw;R-uR|ne?jE^gn~0q+Rh2p(yg}J;UfCcBZ3W>{6SKM$Q4$- z<*Ib|y{`u4(OpOV%lI>eR6u130EwE8aSn590>OGcmL&YXbDa#+dO z_}^0r{MNg%?Xb@HHL-uy1!9VeS0iqZdQbGz8X9-L9MmOb8Z-L%8S#Hg{uU_=p{sJ* zcKmAHp|iG|{Q$x`ou=uN``Dd)xUz5Dfiu)Y`noOqCK%p@y?#fElHhsvU`lv$q=3dde`o!J{ zR6@TAw+IKvkk0ADtWf;=Xnt@>+dbtD-n{5ek^a7w4wEY7<`7vZ*sx{33|4vEd1Kzo zjCElM?& z21~*1=4ikCoPFswWSyZmPb#XjroCQ+Sr5Ku^|U-Emt=mPAm0E8vBAYJ>+A3F96r5% zc(I^);gdNhB* z+_C1S=r2?q4WcNmKjwnA%IQmvbNM_i(Aqo^0~Z#)Ry1JFRd~3OUY}akm9%!0SnC&u zy;EAGjmi_OKh=TiH_I;_KYzVAtA@&BF%35-o)J$6c}Z~i5vHWtmLC630&>dOT;{fo zmCG9gecSAPh0Kg@XI;UQ#U1e%HyYdU(bMIY{cL{k%@C>-F-vIo>^^!kcugK7&A7?P zi+}tmP5Cyg0tHaF%aYn+n0bcAb#llF0}c|}`hqLW1O&e&e-c$PxJ%^HS0jyD3%7p! zRL_tk#jZ_sfe)OvU+6J*Z8FHB-FtspbM+LwgV8Sq+zRhEEk^RIx8xQ8kUG86~1{N7YJTuCL9?-n7+2C$SZ#O`(5AO3;cx}c2 z0a5WWIBpOld9skdkr9lCF*MV$ZbfP2U5B4>xyx7=z zJ~g1Fge-My0QrG0r_zGvHeQ;^$SbXw9e{TBKD9*tHvLP|ihUNhJIVKD&O=w~6F!r9 zrxlTYmRV)iPK*uC&5Mf<`dMbQ<+AZB-sEyUAGmlLPC_r*lPX5ixX`~oWjR>aMb(Nr zR@DhW=f*3k50OW|I{HmIR2I8N+u0bQofq=*m=2WkSR>g2Po09b{5|zwRAI6{3wje- z?V^$Uw{~^VFD(-sbUYkH0;zKN-M!a|2v zH_PHL-llaYU-@s5*bM$%c?1K$zne6r)mQ~)5Q~GH?svJ0#23N98AF3ZW56Z?_ zHP@1T2h!lyIGaArIK`x4dGdOOIF)gFKWiV0EHQo8x=1Mk$lDkKpqqF9z&r zK)%<5s>wLhY~F1qKTZHZ%?O6yg8!hdN>Xj#M(%zQ%0FH054kSGly<6sIdQMEk;)?i zK-AaaRbuN%ZU@{6I9D0RK(f&rnrh@FyXspBk?~9EEcU+9juO`;#5p`~ zWfz5gg?EO_R6&L@rvIVE_q5L_d|aKWY>2({m3HVncay@djhEvd?z4BGB6sFb^ZT_E z`;>j4bA4(vUmsy5>^~vR`d_zOdP@I%rI{SfSC~7jiLP3f&#TTe=n+k3^8{)T0r)G> zvkC9I{N2s4FD0?RaG}gMN}r?q8>JjvWKP0$NFMxu6mHRd@_6Hlhn3#RvkS|69pOGiZ5a)mC-vPU;9f|)9EWha@1x!K7{DmV^<_x zm!#?Oo{sy|S>B~{DX?j1Bp$&c2X>duG7j;#(AXa%Y+44oA{=&0VR55k`|Qm{hN#^$ z@i4_DDA?-Y1oH%lK6wrHgS_C6_U6{S)|a?eDhW66V(R39dcNd~A6%i9 z!M`F+n0h$&GrT^&cu{+G>L6YASO$7%B}qeFx`(335f8)NhaS6vJ<^6ZFds5 zR#J6p(>ypB@`JdzBk3JB*v;dDUTLkYYMG9}5kJd-n_M{c{$!5h)2XC4i8CwtTdWJJ zQIA)3JX>y7+u{ufXWS~L&h0KtR|%M#7vq~U6q^l&QH>*_qY65?Zjdk=?Wr+<6bvkX zFip1;1xp&c!p4Ts?abd5{>?44q*m8;NeX~v?glh_^w)ATJt0}kKDhs_zvy6;p_aQH z5?P4pP8zzp-ZOML@D148)_KM1I{v#zb~_^=jcF&~yQ;a)mzp6LR$DF3=$WcTc)8`U zG|7R^*QReU_egId+`&OL2zvnicZ@hVITSx6i|Fne zt*pZt`Kj|(RXtxk0p!}by1h$p;rxdLjQXAVjZfHTk=Q6`tCqAbjlCqVv;)}vK#0gB z-8T-khYUZ{3OJN@2*cv7VuI8FF)ao9&j^+wj2vb~B`3e{-?oFf77cmb>#?9AW8fL^ zrk8OtpGc%VNZ;s3YD%l_N4!YyN~A8X8*Pym>SZV|ud<#nDZOFZ!wbxP$P9ho4`Y^hNj267 zZX8};N>0xp-Va+6ajebg_wT#pI?OS6%haFnUN3M#iR#(v3+<4RnogJfEYuX7i2kXq zxxw_R18uv0f@db9Tz5>SnJ;jt;eiZ2kMp*V7@FCF?(Q^ENh6S+JVIs#*}J0a=2I11 zFsm1X(`B~?UdWrRgKdlggjUf&PBS~#WKQ~B+WTS5YS^6W*MY^7o2&c2wlqSAWMgON za?eQUj4W-o(VOtdiB8L{8(`$JDX!oACW3B^J_!4qKBYukcY~CUr)bZg@L>7yD`}c? zQ1a;4^u0pq?zhtXyj?=p7K&YkCemu5KN*`oy%7uX9Xp#<5A~V$Y$5LwC0?`13{`q>mSGm7a{*lI1-98p$Liz>A<_o!yyyy9ESIE5U_WW70L8eBIx z72+S=J`JF$uMfq~-tKe30vKx6sx_|~#@a-;A`avr0Tx1UGEO9P!D{$ zo-<3;U;ElfzZJ!Yzcbr1=W$7zk6**i#| zwXfbUmV&gOR#4=YDL#$eM29xVjbMbnUGETfdwu(CSn-gPeE9xEz%odFfQF;@v|#6(WID^*-syS~lV6 z9GH@$dxg{>!lofrTOiLie0P|D0}~0KHrbh!_|LFfvvxRJ^w1j>^~hS|VuuggaZ| z1@ngXHI4zhTA%Wo;^!D+uP};`C_J-8(W~tx;nHD0XT+zO=zh1oz%_b!%(7RqLd?u1 z7q8o*W&ej=pTW#yf3o`Gp$efw_0fGpW7bGBZB^kPma5lX;n=s1hi8ERL+bAFq@y9M zNS>s>aOK_hkuw31n^ne325TM>r$mK8py9uvM$;5_lTJ(36$^c18)Hw{+Be;EHQbY& z5wpuG2;M3)L7Z^))iYW7gJ%>fw>D2X@BGoLC=RCh9$CXgvB2Zo%+g#_3VUnx;lVWd zeEqG;u|!RqUXB%SOAKfw?&Y_dU=V0!NK?N(a1d`G4#o~_Z`YEgTgCNPbN{TA5Rz!r z8b=+a_coS>MJP|&ndmfxSvy9xd7K}4ZHLLm@7NKfm>Y7aSs)tgNJqK6*2uk+ zcgu{9nRS_h>E|ocN`mWMxDmJ;4}9Crc#9vu7G+*y=}vGCZArm=^zcsBVUz34f%T94 zChr!5kVkdKculPiOh70Eidsc}IyR0vWo;uL&2g_&75bqSpOWncla(6nYf+kMQOI7R zaX@qZG3xSU*o)EXOcmVj9-u^>MIwWZR&S~d^ z&+-4n8N5-9#0H8)A#t>;Dd^X!w2`(NBwzoZBJK>d{BP-n?^TT6KboB?UQa1!E17sn zUp2pN|EDl6l^(R}zVUE^ldhXZOT96AO<0o58+)D}jGlMZPPgOK-0VodX-_WdODpSx z^B#uNB$#G1v`1_P1%;%=kmii9Lgc6L>y&MO?<(c8Qn2SV@=Y43Xmi$yzizR&nij(8zyXOjZJZIrQK|WHO@}w#w9wsQlg~mLTq=B%KrMo!fE8cfk zVQ~~@|KePD4CL|wQF3m+*V5^)YNvc*7C!{DWz&pR=vefaH8^*G0JTpknv-qMD8#@F zHwddnWxb=RFw!%p>XQ3&mXCHOU1bRuf}6e6>%rm+@6qq4WF=(=8f*jQEftKa)$c|< zHe-CyRVwEEa@lu%n8?VMh1!~OwVii2+Ji|c-l~^*g%sG_za!<;Gn?Ym^{l4Z8vkM^ z4wRDv_+CD*t9E0v`+1}IEw)1Blvtet{P+JV_JE&LZ}5vu*Qdt25}8+hOrs}B&a8Ij z6LxMs@dh&OfM4}XDZ$5cLb;EZiM{;>#@`sAR4_F9&qFCx!toP+0jViRBv5)Y zNwPYFCIo9o`E6=KS8Q~*MoWG~^q;pNZVNx!>Z+*4vhs%SH}mf^lJv+*q0H;lJx=6a z*R-pEiw)EM!?A~2Bm&dIb>jY_e-};6MZIp~n37ok=eca2eo1VP?f+9TARu4+t$v0o zIf;Rew%>vs0UNLt*(ZJu`Th+_7*=Q9#x`g&^GLQwKu0PbtIk+&!Rq$tWjfcWWK*z} z|F3m|jKWp)DdujL_8I%T94cslU+f&q(?`(slS%wFZ$EHTt`H|;fWx=VnHM8f#SuAv z$9s8$+IvRDP;R`!Mh#=JA=nrl1Br*R0)o%$uBh;LgN4qf)lq9+leE1E zWW$fugCq3XPp& z3h0%e2;BGYJtpph->x4v=@npuzq*NE@tLG7bLZne;9WqRXv?ovb#a$VCF3;Fsm-a? zCAmf}{|x=dpN~c+;80Asc=gfJXeaUKv9)1eG1ue&g9L%{0&mT!yK8`)k8{`e3Cmk- zzhUkO`7I`2C~P(*z1=N#Z{R+{RyhUqR_mV+Ff&6Z%u#xzd5_Gn2O_9$mxqec(SUTQ)_AHo&Q1ywwz zSYjDmrk&Dqb0P%A8UROr6H)P6AF$VE(^2p0DC;xB6^zyig%N`8S7UXk?$x*)QB}0D z@W2yXOD?wrF7kB)?^q}K2VKQ^HpHH?;-k;!?&fzZ;Fo`$oo;*Yq+Bl)0RmA{?e-{#M9si52Q9%{=>jzEE0eFhb%Bos^3#K6*j*o1*_Pcl`I&Dacup4ql%Q4e@`E%)%iR>1 zvQDgxSP^R)%K3C+4d;u<#NsHf8Nzb>Bc7iFBuX*X3a~k=QW4;F`o%o+-b|z-1g=hI zoumI=E*_7Ijq}d1c#lmQeL`y$JElUg$1xkHhBVcXA#-gilo&r=&CNbk)d@P*Ru{SR zF8bmn53dgKCT0Dnd!|1MPp=QQI!xwl(Nb?w($)m!jl=*64~o?sHBOI_Uw5ag?+Smj zXs!`D!Q3-yLC#sS>m(T#rgc!DF*QDV$z;Jb(%qp&g-ua9*=sgd&!BA=U<=KNk-bNR z^NNLOH8;L@db_tkDLi)M*kXsg!K_>lqm_K|Kw?ZR5gFI}+iURCc3){z4>7ohAr2-A zS2%J9%H>V)dBfjzubFy^n)mNRuk?8%V#Nr0m9zZW^4m>1K|;Ae=d2o!r>{$W)|)0~<x2&?0tgoR?MT#L{2(V|jNqbv0^&WNeCdmr+IieU=)C>?f)w!r;Z*5N( z`P@PE+rsNUi3-H6aX&<6``>!C^ewKUW%0cCtyHVxB$RH7T6#DlPhFv>jHu7Em6uK| z0cwHY6PJ)N&nVZ-z{x(w|YUtkSR0XSiUB8Bj?x7t-s+ z9`wPP{C@~u4Z7X<8~LIey(1SuAIQ2IDfYD|X;HD6e5XeLs0zJjrs*zMvKGJ0g=^lsT`5U8>|ge z(wYjsMTFyvW=1T`>YS0){n2LT5pepS>R;oi03;hvcdGHlTm+zCGDD~8t7y|C(4=v| z%pNYJA+X$X?bitvpww{e`lJu10XXx9PR)koNWVlcNOuBk+Kj^7TZ?Q z+fu1Il*!IRK>FKJ;?th|!zb9U+L6zJqQnbxH!Io~QK-jwtH^3#@V(07e; zrca;ihXE_5d{@hl^KlljAL`WKM?U@D$5=t^LP>)^{+5wJO&TFjW;GH;?BA;OIZsjehs7oH9|+yAH~*dm;O9li z`+y%$jox5#vncHJ=ftQ|$m_iB0h8U?J%a`&!h{^@H63+tbAxhv{05QIi1N+&$f#dj z;xfg8*Bj(P*&wvfeWnCv>0rM+ZH{gzq&}H>+<=`h-+XQ6Qv}X>Uw`3hoLFaIxjv^% z{k_xYZ~~A+yVgo0Rlk$RqyF&_|8&Y#swKXq+*4UoEA;*gA`ms#Btfwzx$}W{sO}Q# zks3xX8+HC*sXU8|X2qR*?2LTu`jT#~5$+!0a^P)FHXs!D}9TvX>X+kDWT{fl| zO7z2{yb(SYx)ZsGQvU4Hi`E`x@hyA?O`h46^st`f22W~B*!iQsarD*c^-H-iofWrn zQfZ`em3QX^pHE|SW3Te6GZfx1M)XajP}v`B`;K2jW-9DQJXKyt_jZ%5#XPF($G9K0 zkUPkN(2Wnc)#hktG{yQS&;Gpvnr>~KN6MKQT}cqqo8o*BX@+%&Gr6y} zSU2x^IH+tk+2~^!n>R@iHU1DA7I|jN{qGYFB5v949Aa}0yvSgjbJBC7@53@{sBs$- z&5Ir_U$+j;RIhTF?IHD_v-h+Qn=LaFR#HoT!?6;Y7qm9(w1LlXI>hRP*0DbtFfMVx z&)(JUMc_`-gW05vSbmRR@AyA2HSM1MNy&j&rCz7J|E=`2p-A!m2As5)uPULNi!9Nw z6!eVC5RtY%1f`$bJHiN-w)?3xH&j9^EY~icW^11^NZQV5uiV;{-MOFM*&NyX^P5oB zmQ;7(+Bh7$3G<=!&!S7_NY|=t+)puyg{AYO=mKBLz69wHvd#iGa&Er1A{=CD=Hm{F zAo5|i{O!uST`UIT@r?vMm`a9xmsXW%5YWL>&pq8V(r9_Ws;R&|c-Z;xr8sd>rL*{Gd*S*1PO zvaopnx1867jODf~A%1MssfRdW6PY(gcD%#fu){&(x*%e%aDT9>WAWatJ1+j%%ytI@ zEdp)RQ@Yz0qnVb2&>Jb=YI0@^8kvvRROv%Yc%Yvy2HjWP&ytKCIl24SJijdKk`aW8 z!%mBuEG`K?RX8QR!~usX>Ndru0J#H|T+81ac;{E*sSjwU)V>Z#H#?7Ddmx*Iq8s^2 zBddI9KA6`eaftA&#e8qBAaQD-_$ zdsBUB6#Q*G{K;EnQYV+)G!2B{k=EY2+~j7q*7HXi7`M*})zRILHv418uekwFnTXyb ztb|T-SgJA?kej}?ItIFEDS{K6Q|-v)L-oxG5J!T#TmXS%lbo?HSSV3}@Cq@nOQux18b-#>s0oQO zMz3Pcpsxf5Yf2~nJ_GD~U1j5SxT!%!kfS9>Z7+(N1_kTBmZ`IL0Jvc{E%A7lWwsimjN~`s?socJtc4lbf(Tio`vRegvf0IiYeIbpokboo}rx8pR4T=(9E!g1Z2hzWV*BuCxGI_xrxB7p&TOD#C9DKWe> zzKhg*S#-#-8<7n_6J6>rdb{5Ocs-8W>i*M`&9p$@`$^nX2~YCx?#D$a zS~`5b^E$3~i2~g^WuFq~MKQOHqlFJzuAL|Ocky4z3Q0a0L3OIBm%oqwC;$S*mKW6`BFU8BY&C5xKL~Tn!XGVU~X5Avcppd)=7yKCfk3PraUD?q;pa2 zQk!GkAk<1Jb7i%Y<7r6o>@wvvWUxQ&%gRLN$|~}Yq|T9x zzmV+^rpjl$p-$*jpgv9x8lxHz=dEmeYt)B?lLz{ok?v^qaXAR9H5Z+i`|qt!GU=4Z zY!wtknp0XyvTxEacdN(hZR|Ylr;ibD)KjQNdw-CR$Z_XMZETdAx7HRYbd}{l&@Lc< zCNfR%%I<3k{Rs6AeD4`KoB8KAfs)mH7mVC43!cPE)eE|hevJj>C<&yL$n9&m7~BZX zJfFmB*Sp=P&O2d@^U9ff%U+ernnk<6viP?-=&dl;pgM|nX*izWClDJPfE+67-aUl; zU)I7!6fRwa4@CLTms|cC-u)+YANo1;azEeSCvC_CDx>G_+P;@7Z)btruv=M&NU3V~ ze#bD5e{WkRh(w`cBqyC$Oi!ShLWz)V`YebjVIZ!MSBX`Xsca*?a%5`z=>A1eQw7cf z2dj0*-8Jc&*tv*y)zKzk1ojCPohZYlYClwNbSSU4ekl$1|3GI}=gRpm92vZd<82j$ zEvNPpJN`#y(OtOe`x1ZA3jh2vr!XF&QSw8*EZPRrWDeL2jjzYm%bR9Z|MXc$=sq=u zvj>xl4OY0tNqL()alhKSYo_7=C>M1wwQD1^`cCxLOJXvrm#WbQ=-M}# z|MMOAjb|PHTExKo?J+Zfh)E;)btg#B zf~K%kn>&|f#qCo>xrn0fQ5BFd$@rN2W@PRv=u04k*jhF8ryh03HlWh_o?~R&tQpP% z)-%iqXiZzEoO*V=QtIHl8k4kHJvRL_>KQ(YG73>t4IgWSM=n!!%RwaNBQ`u9#2qke z=kn(fvc5h)5?=++I3B89_-Je1TuH=U+^lvwY?*I!ND}7#1Qey4ifI-o=%1Io z{XXoWN{KN9S_&(3BIb{G)h2H?j8p}Dk}t^%!>94_tsyQ~^wup&P|_no;&CN?x#Dn* zx`ksw3!mxu@tgF7Kg1MIw73*$lYraNtK}dJMbSVREDo0nkA*? zl>ib>B}X{xMl>-bHBR6)Wh@{fR&cU`l@c!DQYFz(z0!Lv7FWba4l4@W(UPRNPQMC! zrR}7cT(DGodPXAC8eZwU%rW!)l#@}R3h6a1nyj$q|CbQjNx>-)U?}Im{rA9V=O*;i zb@z#>&3%-J_BZSR{CrJfv;VoO0fXmz%!x?G28epgRv$X($;QRTMDZsF5_~H0sm8l& zo`|+09qf3mur2MJrt@U?^ON825lMvnYfM#aT57k>h=Av8GZ9&3Tr3Zt7(L$inha~# zRPTf%8U=xru-J5zt#A6+y5Qj*-9M*{#J(zV`<3E0r38n}#MH{k-I9LP=~m^9^{?n< zBQMfVpr+uGX2GP)d$>)^Px$&Qc(3R05tw;6BTTI5&SEtk?< zNX=ER&Co|vxLe9r+;9cP>Fx5aJ3K`n3dy}PD7CO9K4l8pTK`}>hZH(BuT)!kbys*; zY5R24zR29qq8(TJ#v!AhzeqtS;gYPFT4jd_fFNzvFi{$#_=M=IQ?KLu+!V;bDfg*H zg*zH-sz+}R`sXVE%V4Tu82rUlSOmoEed|lfa&8{1EQ3PfBvg& zz%|r)B-0AK5NMiZ(=IcIVR;_@G4LIA7xHQ->b7!w(Q)5vsO82wSIa;v14Pka)K;j$ znK%K3_|scQNB1u;i-K)P1-_rs>+Eiy^eYJiGyTY@M{U$5r+M`C7_wu@$nx~1UwqX4 z`NHo!8<2@Rm*u>aD)B|DDq3ILQN|U${camdlYZ4W9h%s~wRLC2-p}77vD}kmY;C!` ztUB(cQ|=U=ZtA&Quir`ZaLwf<2aZd)cPL|>&8Ot<0(0AOwW#-;g)3GT**X2zPj9pj zqK{b5WWu#kKL9^l0gJ7V6!il_$ELs9yf@6Xr-D_$et6rXTE=R7H%^dL>o@R`fUbDl z10~B@g*pWes$qgrl_RW#=n1+i$^+j?pIGch^n>n_KPP`qW%UDN76JJ5OhyN0Y5OEb z3#rkqsLOFd)RQDSTQT2V!E#NT!qPV}^^M~a3sY6kpp(zfsL!en${Zf%7rRS@5W zDIrRj1KsNc`6Zv$ZJj$b_x<$1!#DGj-pfp6v!$kb88^5~DVce-NL%fL9JL@Z-vYz7 zO)j@eu@*%50!ywJ2tcN>%$mJ-!wC)z!@VL2z)esuQm=_Zv9!AP;vFgmrK-e5rPDwX zXJ0p7dQpMiicbxYgAayHiq25DP^{IlHgh$D_-NfoIQhBAWP=TUSjt800CwnY+8uVg z-EekvjE?=s@5*7$*~)dP7cVR<;!v}L%--a)YAZRvw(jOv%%_w}Piua;4NB|Sbg$r` zLrJY|eU7;}wE=ZkVHIPAtGfOr%+cJVN*M-7N%Ge;QQ6so>BN8`*VtZRSJAf^dc-y_u!|KRGi4xXRk>BoiHF8_)rQJI=wbFr6?)pH+FKC-;UfxNo znqZi$k{R>6AV|1oEkE~-li?y!mqvV=RP<)M#KYfB+EH&n7%iniU4j`BR#;yLI8%)& z`BT1p8!HXJp((pz(PYa;`u|qD2<8!*Fv;rT+vhOtWihP^lLve>p`mmjDRG(HZv)l5 zRu*w)XxYZpx#6Hf?awK_(TgRQO|d&2{a)-o_b-K-Tz}=VhWg`#P+WoL;e=>8Iw2xk z)$1=bYwpeZUhes^D+oQSi~xREf54}aUz$nUQc)1>1HVq*1B+?RDugqd@j}0*r%3=u z@*pHCB;)W)Co*B_ zEAYGjT4K>VB?AX|jE01WXJ5C3(oog|)ka0W-2c6RI6KlJF^Gk^s(~j<6&x{S{MJSt zr}`6A(U+ji7C07KMRQv2k{WLS(gI6~vKG_eMmlusUe-Gak^m`K=TrI~uT1FA6ZRS3 zGd}RsYZ`o;96osdBQ^E11EXnM?6Bx=umtsim7fG{y5}bSGnLHFMS!USh4q0T-12Ev zmw>tXp^b^l88}|r-vD)yuN^wK2=om7vo$GmXn7awVcb#VSv@BxomYSzo_HzHMi=em z7`m!5Fpqu*HMN9r=wf5In;QS%1}(ycuy0jyqU9hFvSX_Ujh1hWifa>ke+z~_7kQ+H zniuR@klkrWWIkZ581BFdiL4s9ryVc>Ur{P_|K{J))%!3XXnS4Y9J&)_&FBYRCGG6_ zx4$cGf6;L?V_3C(;%I66_#{p$Y=iQSi9{+Z1Wo3GG9QS@Mp@;LmbCwAQ4Y(o`^DhS z^CD?1dQ@2w`)|NI>FUT+q?a$b61_jb0P~7B9h=*f%MxG19;})Dr}6-9Zn?SPaF*!+ z%M!dbJ`Z>8WSril{%bzH@*uHL5vpOK(k0CP;!uJ7r$q?#@yCRngJ5bSC15fPU|iE` zka4;6c5)_w+bBs4SU7y?GUI*a#~Hf!fU(^sGr_hhLxHaaKsgOaz{MUgzq1WkOnylSRB-GgnQ$%_3AI0i~v)+Wl#gRLc?IFOg;eN_Nz8{y(kpE27@-0+~VaMVe|uD3if?0g^4b z6EEMYVjPc>`txdr0;Z|9kI{Hen~|dt#T+%=BwKk|XrX=HW)TXmJ1g|wN|yW|^@pA^ z)P^nbTWH8zJqA{pQ;Y+ejDIK{?V8WjsZ(+LZU01Ewnq*!b`3uc`a^Qe4)x9AVu)Jk0Z7=%?;ISYaJ@6tE}R9$5I&h%eKOf6Px z+{Js7ifTsKaxB+9aIK5|yjJiu8ui)-tj90Gx zCQ*pUyDL>kMxd1$yn}nA?-^o6+5c^V_TNTOUld&KT}q(*K~U z{cM&~(E!FhdX`=m<5F!JCH<>nUYf6Wo|FG$v;&0&e86#!J!1N;SL#7A&?iUw0OXN; zn|Et5TTQ6Q7@16{q9>Ld%vsnu9(~g5m4(_40CX@ordsOJFu$~2_Ag(=!DK>+mVIm8 z@DZGo`*DWMW?EB$Dqt1;bcMeA>~?De>(tQRiszf@lrB z`=JN^nbx&#Pkxije)^QgkGLd*w}4r!1L$n1%{KwJ@KXL6$^A(k1LI%v)-QHc)K`tN zF^8uVh?sIkfU0$2rLM#2Zex9%`87Q8^j>lAw*4pr=-t}+SlmXH+#pt0U-p| zIRX`~jO77$`i5VmFCB{NezDZp+u`qd^Uhj>GgHg=Lph8M2I#NTiJq$Lw9G&|bL1?3 z=aU0*u3JSe0NcDkZz$uX1L(u$S(5a-ctBa+JLbn%%UWC4EkymoR^$51le7*VDxCxN zqj{ViuB6v-n#0x*9IH2Qb2WSKNNcM3;8mrIU%_|T*)pY#Y*oDT+uJbR%Geb37O}WK znfeB)K6ZYEAI^m4@7TTYuNHkrbw=PV^Q|}8&ijzq$hIYNBWH8Fcx<{cm>jnn%LD0K zl474^BAashNOOO@Yv-E_edw~b+S~_!N-eF)sG+Hjljv|;2~){n}UaA;0zYEueI0IBCi^m#L;MK;&Z1>PrNc7rN|MVvR5nf8PZLz ziw}H5X%YP=vc$eMN6n{8U_tZ*Z}m2^J1$;H_F+cF(9ghH9N3h2 zsqFWQcM5Rl>P-!VL)q#Y;XHjTG*72Sxfm9hNU@uCN0lMmLCgW<2}wn&IBx@~U%96z zb!#KYiLVMYBBw+UP25gHP3fW*p}v{^}fu?{tUSkuR(dreKAFS3PPd)!R?cF7qrv zo~IIo zKUI38ymnzaqm`H>uoc46WEB4L&TLtU+{Zq^qp)7LJ97Fd5zdIMjlHv*hVZD}tCpS= z+M*CvALT9Pc+CS3d|ehqgENzd>ak!aeS%)A3qS#m@zV%9WajH_fOi*34X{_ zpMqx{pKyAa)Y|ZF?Q5%>x7Q<)qitu8(#sWg@GN!ULawX`m7wiw_+}weY^2mR9+9P8#&Hws?9^y3`qBaNu?>h>*Ur&OlG;r#~?eHuvh(HMRRxHq`ze+7xbs? z8?Re`yb8n7aX(vapMl!p2JM8vB|qv2wnod(`_S|Y*{&Zb0 zqcdpyTE@{GdWoR7C&6E!gLUqc62}x^wQJziz(^7cbkyG*7=^NE><5V;JT6#2Z?=WH ze7NDAX}u8xfXbi@@5DQb-n+n^aimB6Erg}akAHTi|Bh*&j*-$WLjV*0m!!v3=XAuq zBBjEg^$mVsM%ZR3)Lmg)AE#I==eKKX+BEL^>Ki0`UF2c8J8JBRJ!@D*%596UL$5;{m^HkjCbkr_ z6NN_lSB$v3Y)i%bQ9oC*GR&6(PnplLJ%OPhy|!FaE)bVaYbLIDql4BQ`g?UJw{U$j zeT3hxN|N`)(n|PQCrQ8e<=r~mj^{}y|9zqL@-DYot)S9_+O+GzwM`QnJ2M1HmAh8f zi$D%yQvI+Si>1PQH@8nsZ5rjXJ;8=69H~^zUivcI$E@4ZqI0>S8fPT3o+}#wTn;mtELkv0a|Mo63r;Sv0O}3WeyBmw2 zAs~ajgVCp}|Ng)fh%l3o0yvvbOO$zm)KE>#H2V(!UxN#Up8F=hu74TjkBpaBWtO+^ z=@dHhN#!6)(bQmmnowIOz6=R?8BI{J`^U_%CmWAsb&fa_ynJn|IK;*n+qN?^Pe1uL zoG>KP_!CyND}k|WH1|S$nd>A=dgRLP?{$Nek9?^{U;5|oK?>(DetD1xx!r+Oq$o$k zG@FnvK8fMyKhate(5E!Rn|_kMh;vKkbXxOjm;y9*{xME^ut4Xe6uq5Ew#q%1pi#ip z;55pL^$&h(lwox7dh`6P8tHH#IhWd8Wv5r&tAE-o;2rlYGi!3NKC&|3oH!VPeTYjB zurE%39VKI4eb0rqF~UO1{@wS-_V4eNf$y2+ILZ@4Tl)~8aU`Rb;3ANLkfopT?*G7oeJO_xh@3ba3DUFNuOL= zUm$$XFuCOk0SK3zgC|xBvL=@{H*UZQENuTaYU=H;!9m)YSN;qEbRcb3Rlif5Lwc|p z8Ht0-|KaH@!=n7&t}Wf+Fi7{%E!_+ZA<`+Sh=lae-Q7rcj7SMcNr%!RrF561lrVI> zxBlM$^TES!9_qc>`--*Bb$U(h(sxbfLga&YnYxUp;S;Rn;D{$yl}qn=Evosd#Zi%< zF&h5ow^)~wyD_*l_yM*)dfJ`SO;W}U9zo^MAVJCm%2vyU5?e0=zJK<=Jtpd&g-DR6 zCf%Y&X>*fSPM)ltvBJRVR&wa8^!am*Gc#~A_AP1Enk9Ql?2|qkjDQ4K5dZNrBAFYz z)xaV<2^7gmz=BT3VMBnlga`&wA%Um2+UeA7Jri;wSfQ8izk{s>J{chDT-^)jv<0A5 zVJJ+ZZKhbA3a6=W8}6l5b(8FVTPR00M!`D!S4CrT!(aBi7H(pSg-c=OqDg<9uQWFq z7(s_aeI~~Nv8qJE-#gXf1wB z^hG}BwY5_-FB{|`Fkzq;?<0Q}ch}Wpb7IX(m^nf}+BU6>Qg%vyCy$B#I86msuMgiC z@e!OZ)9c|Y^U>Hj;lW2G6C-OiC8XeShM6lf1Fx+ns)QueNP3%Ex~hl`_s0eOP_O&j zt2%J?{X9j=hZo415>GW`5R*;&31aexh1HC&u`+tojc7RPY^<_q22F>`iN5ethUwk2 ziypR)4Gdj6BBqm{)FA!TJaLdM4J@S25Ny93*=v=d`K|M*!V1Y|-8(VX1Nx>k)(IqA z3R`V(FAItCW?IYB0407xetz4w=Qj9n5&WC1sfdn4CB~2F7?sA#?e$NCj?5HZ_i?#b zDzU$d1uKfVXe|oc?pKx_T*T^huMCcG=fC%Y&!Vx#?=w%%1SFz|bbMt(nU*LcP%lb_ zSJ4IxEd7AJp5jWg*-Dth<6p%D1&yL6CP{=pX*ux$Mf0X>#&ixZItH{23~sHX=i4&B z_9-5+DjjYs@E@6q=N|cGN9qi1QQZ78t~hE-$H=;2PSP8ExEra(vBR92P-pMh?wdxj zO3@I!{uXR3;5dR$i8WTdO$Fr8_45GbX|>!Tu?W}n$=?fHOP_Lwp<>50TTwmAgXjU1 zTQ}X@v+=)2R|`L5q8LtA6^+3b)sfrTrN9$|H*QiFkFJoRS;01t=oECq#@Cr0u)I|j zo6?75z@|=PD+DRdOWt3&+8EK=Z z;&+GsLii@bEw50?v0nB(7Bz{Bq<1z4qmQVNtD=vpt@@8(KsC!1s|{bidrVDy)T3~kEDL+QTBe&C)2LMi3P*vjN0XE|BbQU&cWr+a?O+MI zIGn#Z%-+xKiss-^8`@LiMfFA_0Dm`rM62ZBOw)LEl%%}&=K5O7_S82|K-uJ23Zx?$ zf({ug5}$whV(2j6zx(+h#W4mX(~Hcjz~s>j7SJaBXB@xay<5G_d-$j3*GsA14c?BZ zX$PKVj%0WoW0w{t2 zbPW8?ye||Tjh&eI=K+|8DOgP~z_IY$lQzDFDeVLA!uSO6w&uNPN!dr*Q5lmjdG82Q z9&H04Q1%D`oC5rXx zX_X29zy0G~+<}TrV^VCOZ{B-+PfNna5X+axTa3izj{ondz-zp;^S~f1`xLyHx|RCX zPa1)ah^0HjZpYZgz73!+)pJ2HK9?dKVf9SH`^gN(|NfNcH%rP}%aG=@Ghas%uCtkY zcQCpxBFdJTk>s1HtNQbw9~8}%t0>n{XJ?m-+I|wwI%<$$3c$3O^nUb-q_W*)s>IRt zShElK(IocV=;m$7zk9Ect4hpD;`NdhAB}RVP<;AhlkF7Faf+!%JqQ!pVN_%k&mqgL z9>rl!oFKHf=2ibh5Ag}qT&P{C07aPL86%B!P4`C(?R zZ4^G&amS21n-9C|ehXe*iJa~qUhQ_5u==q9O_;}qH$n5 z`S_!%yL9L@e!o`S`|vQeZ8jFEgQ>F{8p?ssn&V!<>!E$8%DE)(B&q_sU%@_eD%lH7l91WzJ zMhWTvXsJn|WEyY$@`SNRJCTF(cOOxf3+t~Q;`Uv2DZ z*<;uRYpw`XhWyY499nf41$iXH@+~_VR*tR7nZ`zFQ{^VVa1}nP{bl(tljMd8Mx=Ra z6YSqHyB;TKcpbC-V}o3H=0DK|x#DN7SB+}4ZY`?$>uzZ#AJg9th_}e=r~mnoa<8_< zQ!in;CoBV=YB7BX1l}>njHgqjfq@xNXRJ{Y(dh0v+4;uQqTK@YU?yyOXO}lUEn(f< z>x)lEE$sqlIKM772DxEZhg=9b>&fc7)xAX9rh#fQsMh=yO2`(p1c}{S6 zoY9vzQkGZ?43-CdJfb*oGruDWhd6MLfuSQHNaS&O>1u4yQ?$h;-c>)SwPp@k_rfgc zlF$T1*D;tb%{l0_3hS9f!GXngFT#TM_1y-S)_DqpuBghEt({JeFxA5L1V}__(C=el zq6(9{ETF)uBL2gt$KoK^6Sc6#Cw4Y8-w}0$U-g`@8n0;n)Sk1)km4(JTa-!H)ryi- zoQD#+>|K+9NZW(2!-{9~q|d4MEM(qagp_kb9Pc?n=v`qju!5G7#Q;moag#wp9%mUr zd{MyeqrNuSD3j7xAvcGbA31`x^1-fqJAmOx`dOI)lbP2h8;@K2-I~EiuIfkpx{PJ- z6@MUvP&)Aa66PJ^*A`Qy<8zyqVPi>0MdyxZ=@hzS4=A@1KI;7Zi%V-k2pek2#IQ>y z7H#3U99IFT$>-*b64if@|Bd^%Nu`V;P!l+;8_mZ2_!*a8#lNddkz%J<*0Ftmdr95V z6ui02;u+o+67ntUk)zn1lxwsxlrh%b1v+nZ9dH#&p4C2j1o~q7+|#Fnjpy0VxYq8+ z=qOO)cVUlVP*vhZ9=17@&p0pIcw{|81Gq-UaA{45HLDEXPF4uolD0?kVW+Z8ecAG8 zTb|qfUf1}Ou`oT%yd#!s;0C9iZs3Lzt_|cKF`d^pP;Lyn>LB$I%X|GxS)wN-@kT-w zGnHv<_y{Ages-fuqhSqjXxPg1IJFS^l|uVdKHPEI1cjqgxM*L2zmYm}4K-x&;G0}d z>%f6W+VI|wo5!(Qpyak#OSfd=Lzs_WC``6g(^QgSTjIfyf+HE?s63f3N)4BG3dxV=3X4 zq*dDeQY2LwA!S+KXrc6~BGv-*ak0l0sx8`r^7{q5nQxY<+M=;uiFX=o(KL$Aq3I-UtYe<|?8NCc~LsWJR7i69S9~{|#>8d7944EimUc zPp}5P{kzBwCEL#}@!EIyXwhqg+K1kgiE!fRv5bk+t(iDYD!NBHgLBB0pqEA7g%sqA zR6hqx&Yt?D^FwpZk2mz^6V_RV{+3I%GtM^9>I9b4nXml)-B}7mdNoCPial0S|KTcX zXI?<@8V!TI1n#alKuW*gADOa{(O#Z)5V&kN9srb^5eKYj&-vYpH(y(e7)N5V?-})S zHCATtWY_%D6$MEH!wF52XgzHrJ?f8jKkWxz>VmgX|c1)Un z%v?;kZfpRsn4VQf5bD4LWv`a*eHRnMx9!yDV6441872R7PaCv_%CgZ|u+QS4sLN8O z9P-*=l^e20C5Qv6=vTIHOqdqSFTOl0f81(Nu{%Z^-2fQjXE3GZkx#>WKMr6XcQi4| zex2tc^=0|6Ga&n}u=Cm!f}5idQXVetHLS|D^*rrRyc5euPoUcUAhoot|wB`iTLSTCWjtKU&vYDPk1UjgLHd#YpO%}M*$&A!(7BVTwB z-VaSSae{HlTUJC$8#@s=SSC;YuJ~pv(QO`o2&cV9{T*D6-9Hg}@!W>rvF?A|u-|X% z=>4gj31z?5Q#9dRqy(xvroNz=(;@|EM+|v zc9nJM&^^4DI}Didv<_)LyYb6bm@cj8P=!2+Krsi8SHbvsqN2YFA4a6+L`SkcI>MoH z&yJ@g8KH##-gRsH=mg>JYLr58%%#ta$;-iDdFB`I*rY(sON@R)VW&O@WR$B3Q<2D4 z=3E*zf~HFQv(v81Piz8QxG3$WD;rfxfbwcejL!1wS9*MG6M9cEAgRn`wR+0)T~f@i zcW0BXo-H5sBPQ0@37wURMdDEx3w=)nLHvHfAvu5|!3AxpsZHlGk;L%s2?og4KO7x< zd%S)V$$Su5qqBiu~HaV~pU>%&WmcBcb2U8u{CS#Rlj1&Kn zYO(3cc=P&wVDY}DydzxUbM!OFyidyF(uHnfmjznkKp*w ztWtb`2Iy(|(fHztBq)`Pd$H4)n(`(P^%fN0LX~+lefL!15dY%&WF)@v0vi>BPsFhB znIBZz060LutZ0UzXN8i|0BaGrg8I#vVHx0IAQUw(q|hX|~=A z9M>6xO8;DWF+F;DdT?n;_~*)u7QM{#lvV}W#iI{L7fd!L0d5)sEe% zA1C0BHg?BjjbrzGGOC0%dWe))J2>&E{c#N#ud51D#R=Ip*b41U;ij=c@J+Jszx|B20L1C*I(Bje&q!O+6@~q+iSRaM zp%*MZ2|naYKQodf`rm>#ZzCid_sqU91y4W0Jr0aRf0BsU9%j`v`ce1tI&>%N@{vod z4^gzDG}PZMt2rk3>Pd2C-|!&+;j?cfkdZJRQixkN#yzT^GJkp47^2pNW@;s{(1&yW zu?!6GiG7jib0`M;6HblPBw-_zKaBh6rjH^65yH!f$S=YwyHp5a@#x<6k-wLWw*1@0 zR%PO*n62=RHyAi5``BH`jeXJx9F>-X5eO;C*69-ouuiLn zyie9crYqC6kG}e+sMI~GZfUgaGG%?gKOnLKNyx|=^1fBmj#*yS-S&*$(e@NOl8U}4 z*XMy$!&aYRhp6Q)KqLmnp}!gM%SCMCrtIQG_U%1i>kBtoZ5-su+uM)1!AXo0p0yYB z@IMES{wy1tG9GD(*7q+qtZc|e8kJ0a)MLqs{|2i!%d!#T9PueJiZ8Y$7Nu5^r+Q!9 z*6B8a0~k+c!C%TXdYzI$hs_l#3C|=yBeXfwz$JdBuZ+$GV44CC9MJ zXpKz*54sSUt>391ga_-vl8PrEu(IrQGk^nd$%#1U5I z&V4?Vzl+0r??>@0R(rzyz9A&Q^ytL%&DZ+S-3uv=+S*ZgDxoul>FMyH7!mqOUIkb9bta<9rmfm8cmBENxw7|U%Ov#5b z2;t6%>rdQ*B8xnAn(~S)F9In0-UftU51QK(S$>Gl*BWI|G6IG^Od}&K zT@2ZR2f^-?|4sx3A-CkzPXj6oETt&gx&naRI=~(P{g?fQZ$Z9W+`yML&P@`<#ZX$N z;9}6UMCeS#W|LIXwSc#t`Fg0~P1b(4Yx#@e1C<)_LD_}Gx#_#Xht{=%582HoS{eCx zJmXzNsA40g@@5V^_}D!`Y*HMw9MDhXm}|Dw;oQzbsC%o%tJ%677D%6tsgDN62aZjR zb)EdX8(xeqU)*$~Sva*sO)GV+C>y`|)oT^x*a%s(7$HCD)d)pM?K`Rl13@ z0M_keFp|uk@1j|st?%LK&sF91Y>vo|)g8~*}9#)T57gwmm>`p}t zu{5a)4kxTv@K8Y89U=XIE^>i3ezJV`P2*C$;nKWS+tS+Vq9E(VSgrRi$8WcWAtwCB zH48W8aj$!3N<=^i_175n1OJ-1BJeD2d?O)%$B-~PBt;b*^TY4634lsx2wckt_1{H~ zcbp6P@KBvw^Yt{dItrsm2C?*7pz*~1JsrRGP#ZKQB3T|j?^`;@6-EA@sijf++XSn&ATZF;!QvmqLZ2*0rK>W2qB z4T@&N?r($tFzRT1>S@&`rGwKm1XLDF6$aKh@$r#?-U0XGEyvMt~8 zM_^%%9aNpT>+uVMMSO$4o#z&`$c9esL+!KtO&gU~ZtV4Tvhm{F8B*dr!OjE=XZ`cg z&oimG(Hq0f7`?5i3-ozW;e_g$6y?lQ92Y(gJe&&a#Qt(8P5Nsw$QCCWL+g2=dlY=t zsceKOn=9Nn!%sDkW+_JjRQ$?o+Q18QAABL);#Fh=_&lP&21L($qT$Hg{QBUIBlb(^ z#|D`)xiOe~6XZq_|Cn%TqXV4eSbPKgS%JR6uWw?XfJ&_{Hc8!T&O>5%Bw3R#kqR++ zFW%&&yp&~(8ymkm^fuY^TRe1o*3RmjP)a8Xd)M2JT<)4RGYZe+nM8ATQK04LDfaH? z7gU!vvWFkWQi3R%cb0F^j@kES;`WEGS49Q|F2UU2X-NqS#ZD<2I$bONu7CL#Rf$Cs zQO_0BqyBCMEqEUn!iDPhcuzwv%^2$=0tlsS)JTB>5>Wt&%7Cz?@{hw-yLTGd#2Ybhnh8f`}^LbtYOed$Y(qghg;^2g)1XcBh za}m3#ImJeCVX^5LtI~cB0g|e}rNUc1&NLNf{5-rLjBMey#F$~_g&KXsrkiK3*Y`BJ z0nu5ou`Z(G0G8(^*J8L&?(vXf8ACeUMDx!o4ZJ2j^OfulBDKby9^*tNBHV*mewpCe z6b79oo7M>I-mD;8*?JmJlvTY^()J}e7BrH_EAh*1<#i)B%DB-7nUBFBbAor=Kx%K? z;g?4x_KO-P>hQ7RD;Sx(D_t?YL)TF5x~yD8((9$Swl-B2A@diwDy*|LpItzJ`?tV4 zISDaQdeln7qItbV>NYxjCOvhGt3n|WdL6|cBZMjzci3}UCKd3^soInE?xX#p6h4>c z?+)n%69(Qw>v+p=8V=V>|7Y!F2`hn;HghYv%}{5a|1yS zI#~zH7g;dE+KsZrw?+I1j2#*nQuexnmkE7(CB;zfWdI-3q64{=IR-%y1I)l z$K&M*!q8VF+dOL&Xfg>GI)ooMp?n9DDV6&R7G$3KthrrJP0JNekt%{Swz}KEOx5+L z#mHQF?bal$a>%P*5usnAg;%b}NR1M$vD1&U)Jww3|E%stl14Oo$7BCGBI-K^2kgrg z1-NibyWH}15XmNL>4==lJk|QyAoWHyy=U=2vhp7Prm|lDPLq5{$3T*@HA=~aFA;`^ z1{fH2ohYMUU{q|7LOx$oxctgttG1bOW*dAE$4weT4OFzGb-Pj5yt`$-Yl+YO@@*A- zAzD$XihquC=c=?YLb{q~`s>m&W=WEwC_cBQP}-RWC-R2j{qc_3y%dP4S9wtD4fQcS zNSO zLGcA|dUNYR0M?=nrq%tX{tIt`KYsgm-dLxlt2^4fX_+D-U3`iOI;vzt?L{3eI!tfd zWw5uI(0#glLL@jqgY$Stt*r3ofgKXzOF1>cAM@N)szUUP`kX6!CNSKjirc+{UwiT6 z#*oMDd`RiPqJc27e<{g@C+JAXYC`?wC8Cd~^1sa5bMgE|6vvC&h}>oM(wc3}R~)Wk z#tbj9Vt$Sd<*wo*nnXS2118%x2kzf~h-#Z!G0_=j&)ZX@BR07o7-h$>BM)y@DLH^Y z7p)GFAerX)GW$ZnX1emrUcble(%ZzVgLAosn;t4>uUZf-;oekeqY+ZGQcFg3&USQ6 zBYx^)OcjP@#fsRCt}O#aXytm%sDb>};a*bDy{bo!OzpsT02g-3ktcjJbeZfESEN1dtn_xQLfjY-EJ?a`I7o9J*j5*U*W z^A=4j@g3m~slx6!7}J27)*FPwJ6y;k8q>>WF&I>s5XQ@i-$~e|G&5Ra=}p@52Rs)Z zS41ynbNE!bv{`_yaY@v6U#8?mQ#Lj--sxQ_LgrZ@3~oBPBJMVdS5~EeeQfF}M~W2U zEtX~>X+QtL>_mgpcb|anMWDN)pe4Wi+CXb1O-$e-gfun6iw@+Yu9LeuQ6zo*Y%}|s z)ca=n^i99hfum~s6pM4hZY@iV^cA)>5AW$zn&nO}v1nOI#!kT2K#u~}NQ$(a>-#6! zRD=Qqko#<<3o|@qrjpL6WMgNf&R-d1m2LJ3SS!VHr1VDcWW2!9B?pJ z(tkXN?0_93CPW5@MuWS0w zE;866NeblcNXClJJBh?n{DV+8Lm{r4SH{=AbGhpvpcdHHGQOgkSKUpfuN>6P7AUJ~ zNcLicT^Py0;1X;O$d{TAHc1-l497s>ZNM*1KB9Wcc`)sm0pA$ei+CqNsDC(T=I8in`5{~rgj z)^pHg@wE$9vwNx)ka&}y&*B-l(6N(6)0Vf2Z_#~LK6h~cqUk0+=k069mzYOCRVzg9 zJ2bRQThI$QexhzWn`3KbuC}1A=^2#gmI>Jc3K9Z~f=Q8?CM%C=;VsW61_@mKLk#aW zlc=0%vR`J3NlGo7kUI%|*kH+ELp?RYOfM=V0TIJvGp+I)RNWPgqEj;^xz9JG>|PMITj~;fNtI4$8yj`S z(aiYikQgL_GI~47o+llWKXM>!e87YEb7PWaV78?lKaWuNM?*OZlQ!p!X!!i@$(dJD zM{PvlqfD6Gr=G#I%82Ving~}OUxBAHbI&Gc+Jm+v#!9;qEyPn8-y*zw-=3Ku34N+t zzc0THjerj<+J6;^r0vc5UsGU74a%FL$e!)hd>Z^?{FeGanZp+TPcVp&n6YPy%=mtF z!02K$xVQ}1N|z1+dEwhs{FYD1aEYr~ySF+{r`CqHQ~NHpW)BYn8ZF(ycxc!^$@5*| z#NqHN{as)aA-?2gvCyK>E}@p2TTC^!diODuVms4xVLq$lQ$yX6U7-1Ay_ykKjfO3j zfowdW309U%GI)J=L>`HgA8>AIQoRuL8jkccr zAqIW(OYD_rO?F-Mc^uxZ@frfVPG4+1^-YyK)Pjf(|9F-b{Rk&LUv|ctP&5SHrT{=c zQtTAgiT)8>161)tCc(eHl@;5WK)>8$xAgl#1F5?M;?PHEmgRzf#46`r@wHyW6o=%# zX~myruMX|4Fu(3_ST&5P#EV=E4~V#q#Zzvcu5`;5aX~40oTspRP$%7tO&#;B6A;;x zU>x~onF&C@1~ml%(K7e%BMSnXbhX+Z2tYykN*g_Q>sm2~o|+FL(P114G1c4SMh7A` z)VGw;Sr?K#BYE@j7SqB_3_$~lht}J_N-y^%=<4g+Kcv5?T;pH}n6+}gP>Sn6Y)Xpa zl6CDeXLXJ8$46F@4A!3LOx|}{h;G-3)DiWW0bR1;7QQES>;QN~Z*nCdnYN(la|X_+ z(sLg>^2K(YY()vom*eLr|7-57StM*FN;xZI$oO0wa>a1fs?QSTTd<5> z;`lxk{q+$O)R87yIo3^I67v?faTt#+Y2`WVH*(XX2du^xvB?_JMs?puUZnA^FBvZK z&ED6=YAwYxovfHc%-HuN1+aRzCj`C=gLpH(Sh~@>S!k@c0fJe94K<+p*8(I4GPhS! zpEG90f7jz`mE}E=7jkIholbt_0~)z|`gq%nUeZ% z$UsurJ%OOLQxSgy{%Mug``CV@0wlU*wsra3lhF9T2 ze2v&Z-!qpy_GRLO@870N2egR&WpMWZ^K;Y+lh)WpSpl_h-PtF=+K>7Wjt-T9R>Lio zFIsXQVN@2-lerxz5$Y6ZCF~O;#P7&)c&4>p9b@Po7UO725GG%iMem(iq)yvv_Ley= zD}|(T>FsK;=|^cYdB)&TuNZOj` z?yxv2sb`#1S+G6y`r1sKorf_P3Eg~iCirQ*XRM1#Zj!Yp*f`QAVmvmz*MyTdb5X^_4cSMK-Stpr;Uy3!s^=q9 z?E*VE^NtKxJ73{z(6=xNDP(y%!XvB8p^eWeG$JP zNhWVf>1$4T|3mp156bAI*0Os{Q_p>6E)s;#$zKyTh1-g?x*^?<2ZBcu%7w=gF171u z;HC)|{F1n308+!@;<`WZs5QzYmL*Bl4nJBrrZ@qesS9@Thov>qcgS*;3DR6$=*puV zbV{s}*BXIt(E%c_q38egasrw6epcF9#&)Kl@aEcA5klzC?QXk1H@^!&g5wqAXY&2y zdd2RKrF$%y-8+LaGS4qCKW);(;wIRtE33fqIT zQ~!eBg9hW!zl*mvi8hq|d3sC~%8sqM# zOWoXVtxKUf3kTsT+hjxm{?|V`RluVf@gm#6v%h8CKR~Htp=Q(w+!NtO;PqTUQw@K% zzS}<}1T~wRa%M-tZMS4U1fp=!%4%+(v@rTbhE(*x$fD_|H3Pe1dg(NnO5aCn5;v-% zD+?m=V|Z1I1uF{ZwN~cVV?5%8LBt2|Wq6Ak%*Kj?+>%9g12vLMn{5kQ+XPqZ>=`1v zaJ?&j6z8q)DHG4D54)v(5nbmgE_9(WEg)~)FNRULr(&!<$U1C#o|OikDu^#gQo4>N%cI~qZJ#2MR7Y3^J+VXJT5Z#-qxXw>E9elWNm-lsG>@55&=Olz;E zAt@;#22bU7_`yQfU5>7?%Dtv-H z(6Pv*B2O{=QXxi-CR0nPxS1HEC@>NBY@6JEsfw|*neZ1p#*Y4rCDqcHVRm1DD+Q8S z2$EgFI8a=ii4g#}_r*c+XPkF)Vyj)6OJj(J5`{i&pr1R@0Uy7F5(ad*wY9|LiX|4i zEvA53QR9-1ubx5TjG_Mey!mK#scm${jX$l~rYFji(}7_zc4u7wesVXOmxjo*S=**B zU%q>#807mU#Tpn~oz**;ml90HpuKGc@*0zbGlM?B_>^&Adq|pd00MLb7`L^@P>&oMo z$26ehuGs!sk}}>Uj*o95v|JonqJ~)lEPcEG)qUoyvck9ZHqbGa@(Yd6u9wy}&=Rfx znHsAtNHJDBzBZ0uFz1mDrGd&g+(roEZ=^4 zX>ws|2G=-pHP4Ox%JpRa1E|3cX@fAV0V$A5<`(^w?%6swsJ+0NsYvTV|8hT4b$8LK$GxHpXaqbC20LMmkA$j+=NL zL6pQ-5`7)6Pt>*H7?m`5BeG*sza4SI4BZ%%nYiT73eeCJg&YSENa6YSz3Qzlp85ZP)^nCJf>nEiYVasNO+|C?_qmPF_< zhx<&@l~QWOFZy~EVDZiJRNF-GQ!mSVrC!*Y1{Tw%z5p{52lkQDk80TTIw9iz@72Vtc@G1 z4^~e;uvXrD7+9Ko5zB^O?XR&)4PC7U{z=lL+rNGxo9p_mDhJDd(;su-68cAlF&!Zu zX>V2Yb2Vsv+Lu%*x)2m^Dku`HP{2)dRE+vzqsBB)!lc}NhC_Mrjb7#U3C`IlL($Ow zAVq}@*@L1{f+6_wC@D4ta|no-w@b-kmQ<)EloII9DU-}vIJ`J}3HE$)iPiF|E+htPr>K}1e z_OdlBw|IGfV!K~ils_+E0Hs0N6l|fKdO^)GBmRq6gNQoOx_*h_1V>v&n6>V(+s<#Hh{W6`wO{JQiIc|C#`V(Mr-6vei~C;o@c-M&3fnX&daa3%zzmmo5P&ifHTLuY5h1&>Qw`S8C8nYE!x;-YAAfz`Cmf z24SGkM)|9r%9doSu@OV|qyd&=40chja+)Ggd7bzw|X6TFc;Z&OrtUiK|p% zZcc)Bd#0TTDcFQYiLr(qqJ0aj?`C2-UZ?<31j~vdTY6xVdz`+QJlO*g5;sRgYF?m{ zgGW*hI{+ZzXo;!?_I;}0DMiy2x{1Y#0x9jd#TUzpGmLgK3RChy+EJZ=K*b#b*;A?* z62@)TU`n>bLzXLuZ+1jo9|~={O%Hdz!E!M3CadBer7wNY7^NBWHDlZ=`#WikYh|EY zBv&!mH}U;I517@%-Nw%gDAb=T2Z=uw%^2AQ%wV3_xfUyD=tR<9QHjFByN-@M9#pn^ zEq(F&KtQ&9H{HbDOQnr7wq9*imy6F-yY&1fEMfDq7P1)&rK(69uHjspf$>cJ_k7dM zLIz342LRR)d3q)~bSybQuK2cj?vZxikCMN|pJG>Y>2HaCBAdd#oQ(01DQcFjfB6O$ z$GvP(u9z4^GV*wr);}*qJZZMjt;z3HvwX%h&@PaPH4m9L_dPjxU8YB-uJ)&*KT<13 zp+FO!z=s|6wcCJWEvs4I)D8J916ckmR%%r`9X62hn6+MOdbZuIiZp%;-AJ(@IxNWZ z0RY64i)-P#^S7JmQ!(kWDWb_!Fyhtrb$gf6)6Ea?690w~?E`LlrN*Di*vC8|9lu1> z=pGmg<`pHzz_P6RZlcb|(3z1krpHq#kg_?VTMX0C0Borx5z>KZV&Q+c zyvw87k7S^=JerAx=YCIGLXb?P&gHxPIPk?HkivJ>hReQKnP9$EghppkTT8gh9BbUp zy9=`Jz~X?egxnydEc>5d1S!!hT=*CBhzoBzLj>uW=E@?1c;;VRvCosA5V`T1C|HC< zuiD1!$>VJ#<4y(sv-%V5kJA+X5UNVst zlf>D~)Ack9MJKVnDWO@r7n9 zWiyq4vGKFSl9OMq-;qdD*Yez)bZdRR>l?V`!R7Ar=UC@?1+!g&RxTbM#X=(d)470; zE5xV-i0;wC(MitL0Jp1w#HLD0oG${`?+Rmt)klh~`@JC*ViBlEtjY9y)S&y+Jan;8 zE`+XOrOj_|%4o_21pQk>8~Rej6YuQmyG{1q*eB67g>Kb3JJ+7ccvEO>mu6rF(94eO zd&!9TKN&mOL@`3(xT<7{K2mnf;oPrgEE=TO)^2nI{${fP`kTVQY8Ij9cwbtW_LzpI{TmVcqJi7gs>U5yEh{$5d5dFLzn zZ-F{?1q9Ys=(GZFANAp`Q`+46px}Ivk@r6x{Fuc`dyE5pM~sQ0L}mqK150DjN$%t~x?DsOl?eG%;r38+d*R3I`hmt<1x;dYvAj_dtWI^p`wV9@;PrOlxedB6Xw zybu2dEQ^yD@ykiha?mIRmz+dkPnd)-co*!|Qj@)@JhlqzTr@W~#3B z{N^ziBt)^CsAc=z)+&8 z^mrtV9Hwb=vTdZ@oIUmill=waB&TQU?q$nrHV&PW3NT2DdnLp-WqhccR%3`AM8 zQ7vB@xuPW&t53uAsD{B@m9!5oZSkqN`8&H~&Z5fcGr*Lafm7f5H!>q_k-sLmmpl=E zn(7hyiV(+~m+|70XOa%QW=@Vu3P{`a03i_yIEqxe7hMsDGoBM4Qq5{(eoTxMojSae zC@09~a^KVGc2y>x0X+6(noCj<{c)^5$5|IW5KvZU0xYnAUv5l$E+RxUVQ$e8EdlK( z$?eUs#^V7Tx@*dQs8c2gMSHq>Q|$HXLxNZzg>Nj+mFtj96853-A2q(7 zEgJ{&l1;0WmI(@#f2L~y1J&^8`i)O2LrL_%&*z)s{wI8pb5LQ2(FOMk73cBjJBd=j zp$RU3KHu?R!Dja0a}3(WaS+}Ry62E1sjwsLqRuf7cfyP|7cVm*#Q8IW`65DZ6Kue0ASe?L(^lY* z)HZS~B*0lHqd}&S>JpJCXHLoO(#Ccd-S3y~EQ=;eycwK@;5qwtP(RK6P5L7<2Mz9UwMA)#8&6TOc7IYVf z3Moy?h4)`x(o-+YFJ~>hFp_ZFUHlc*Jt1Ewbq) zL&kgN7&;P6^>r!uyH8V&p?I10LgiBx4NVK6o~a*`<%prDln5!x(g%q>JV2Xj2;F}^ z=Q_}p^m8Ayg>6ml|K)FH^51WRN63wNhabHjGhg!d?@GFV*&=??dyS)o_|O;Ze1nUz z1eBk=*PFJrHx@^`8%|q|9z=BTmBro2#ieK0OES;OBc7XXm=Mb{qxy+_G|1SGpMScX z+#mrtI5he3Hn4s7BD0*r1Nj5hGgsNmAv!`DSYaotThce3(nm_=Pp0R;gB&!Osl}h~$Ej_d4J^LVk>f zndz|6dxhLbc^^h7q{?}wNRnP_urE6}fpBP=l5@0a00$PqCwxw2XT25VvJRNDSS&28 zz+k6_-d^N+S%*5K`64fyy5QU+TG-d_MpGr;K683=?Q|xqu&5ffgqJi0dA_4fj`{~Ifo~IQm2TtzjwSP z_Z$|dtmG-?-*N>8o2b$w%1F-$ey?wT=>LmThD&@19+;3D->`Z7{oiY~5umK;yldPb zaDmq#n{_a5%1XpX8Bx2hzD-L~RkG4t-ov zhi@m<>*L3vbQOt06-lC*n>2k*VRr^H*Ofnaq#cUv?j=>sU!d2QIT) z?|j|jS70Gk#a`Gg%~cE{y#i8~--YKdPXn&64F4ZZ*BQu$-*s!$o~hQ36@(hKckGDK znx!>sRZ!I4)ZP(6QF~LWReP&htrZltXRX?Mzp4N8ew6U(`rUiax%ZwEJ)SqBHJ-3M zk^Y_Z4X-~Vpc0S(Tfm+tbkDHryoqWM?fh9gHEPP@nw{AG4|W*R1cU32?-(7Dt%BZQgcZ8F8~ zWcjbM^yPtz25|HXqv^AcRbOx1d++ypNbci2rl022G%@tE^2rl%_j2^PSm<9F8+%dp z^0OL^!6zkg&LCs4XOT?;m8V|W9L~I&8e$53a+gT2H)K(KWZ3h_rfw51%-8}(P3VEq zS^wkbb3ZELgl%67t%rO(PXfq@WpN&|`A%ChpI2m585Eq%2s-->MZDJiv{hPkEZuy&3vL&dOoXvz2?g8Q#op$?|vnX4M)1fD@SQg=(h+6bw2;el0%q-w%*`C}B3hOxbY?pYb9m1o2TB zR7(}bV87iexiZVK*_=RrDdQ0i;!I$>5?I+g#$V8lW{THj57;9HwQ}oF8OU=5 zq{C8$qq=y^FsUzn<(c#EflDjHEY^~oxWrr1*(Q+%#<7#jKHG)Be46RopstrSkifP0 zN^*%J>%pFDmmfxo{(af#V+4|-kU#;XcgZffdz)8x`VFHHDhs_vV;iRPuofB0FLm0C zEVBaQ+%bCUHc0wS9N1f_@sOcr149_{M(@HWY)RLa97tZ7qMLD=1!Z6AE(Wp^;oKZW zc)o0E#Cu?=^?9))XK%wv-YWQ)0|@s<#6?>~J3|`}02;rckdg9(^1bG}?4j$N{C^jf z*sr5ZV1vE804?C3o`u z{M{p6#hT~%B@J#vcGV}hm5N!%pA1o8$YQW$jsbr zowv=dZ>&6DSlawk={j0=xmMiENnO;_V|47pOM;X41Vn_>j*hczoDB`NN�+uGB^ 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⩔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℘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 DsWXU<58Xhk_+4Mot4Xc0!UF^F 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%0D)VjAG8EnW!bt^7j69b&SJm9bRZ2%4N$m-IA4t% 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 )y%Et z0b^(M|39M-Sx=dijO~!zpC=c;MyvcSIZFY$A35xI0c6BzLW+;4!kM}`v1xE`(K(%Z z%$%K%?f$FGQlgS|4_EmJBbj)KyigSbI_RCbk60p86O*?dC>GkqF~_KnF__WiO;;?I z8>*RWNX2YzWte^5#60`tHLqTz)!>KVpR9$5*O|~=*;p8aP0N1fZ075)A8R^`)4XWq zYsCH@4-_Q?qII!j)r2sga7S*MDB=RXhB{y-vAH#QuY&`!WNrD z+%%q`U8ROAYXjs(tT0mzn}jt$@J~Ytd=vWl>9_8HN!d%!id3oO<9?_^5F8)dAKJ%7 z43C`oGH0IbB+6#5-Xy|ppS3}MNLPw8tUD^V0|s-XS#{wf-KYimBss*b-?)&8U1^R+35-=*m2a9tG#vZYbiIF{Cfd|cp*!>H#QT-Z5{aE5_mrWj)5dM))!*_ZYJ^h zQYfw2MJ|rcsYsSF+z<|DOAbr!7~0@q`SM36s19sM!LJZmy(VpML=mmLPDflq`O4A z`+fN9?|o+Y%FNz#&bjLfv`ZFf;_Je1>N7o15lxxf6*OhjIr-OFPTYOx2)Qp~HEL(` zlY8p%7Q0)ODf^v70H(HEWlH_w)rH2%OiE{KXJ6-Ovk=5Y#=dL2^Kl}NyFx{?Vlhym z!n-<6iBiFSgIN(@RQ7Z*)3Xpda!5ma^lU*{KQ4*2jnF>we&@z?D6%K))W6@!-{=)! zsCei0hxM_}A17nfB)BtD3*Ap8Vo!rxJ%>MY zkdvb8zb9pcM!wF$vrya^$EVx@=bzkAj3k-m>MhVcX=;nO9-Q?0`?oP?aQv2-UY>OC zJ-zdCv5fEmFXHZbWE^tGnm6I`LUKoL%2suL_77x~DgiuD7eO1+t~1Z6e&{+=zlku{ zK|I`|#79Z3UM+1pS1#oU1DSM$rYv7!B+O9~ zHx`6_&3~4_x{t(l^5p*E=$ZB{&jC9}wD0kD8plv95V=TEIwz8DgO#%SrIJe71?&R^ z5e&FR2xpk`9-EQd9;!z0fcpN!r@&mxVUg4BynB9dfH>cqf5}p=^R$F$kp&UH+5+m=>!+ot-LsX1r0kx5gjP7(0+#0cd!e`hYMSv||FlFw&+S zq$Azev$ylrhwxG>p}Np@=doy`ph#)*%la)<2?MFar>5+-zR{Cq0}n2@2Nv8)ZQGq} z(9HFVf`A#i)Q`eJBY}W<%!X22H6UR^9>_M+zy(@Q{|^u`t~XR@9%8>E^@jKeaFhAx zPHfnB$hHo{T&^?hjC9EQf0PKJpM&vVQt-QGVUDvfOTtIm~7ch zP^8o8)z^f^abk$nAq^DWpx>ol^&t$p%3uF<3eUbwT`J<=h5yV+9Mrg8O$@Sft~ooB zV}J&PYY`c+DS3c*S>v>DxyN3XbTq~KGvkvU{MjsiVT&eJkQi<6BX30j)9UV^8*e05 za(+z;s7TtlaU6-+uB*STN;3U_V;+)R1uQI-)PCq1)%T)}e=|sC)h0AQzyN3ccJ zis!|01_?$(S3F?wzc3-!v}~A$45TA6ETxg#deINjjo4_@>_pGy3^X)^ezp?6R5Zg--n4mmntWcZdlu zKNeee>uUV}QOhjee1M#9ZNhgHvxM<1O!Ui|c1-p;k6F6n5+ z#Ce}vsTo^Dj+sSO_j=k}FHM z04x(Hg{tQ7YY|H9#KHzv`O|ycjYe7s-B(xvT4GdjZ+%!5=52XcPj^}J(7D;kaqSZ} zTs-vhKwH0c_N=hDW(Jt`kw&+&8!uKPwk92&5zcv3F#$m%X-ZjbgnvZ3 zm>?r{5K=a{6ZCdh#h{RyNwDAfB`D`R3Ns@>Y*!Eh?d%MBbV*R z`L~V2JA#u4`hXg&ZvQSMFyNk^>S&}c@pE}irzgsOFvi3Lit#X`+<+n=zFLj?>q>SG>aQ3;P8%Aytwo%g779yqZ5t)gQn zAQM0sZBjOOl&3QO<&GLcXs=4Xbn2j(vf2*+0Faelqammyncq-%qBb*ks}|b*AWE(G zA`uu6AVvU`Wgy7nfEOX?%)RchM~JaIx8p-UU5OSHlo2McFT5bV$Z=t;#F6fIO8}A|1{5x}G?-vKZOq2Xg>;-qZ^TwAUA_oU{x zkyj`g48+IQE&)l5WZWdC?tNLM?BP=K1}o~qu&=24M^u;HytZW?a3%$N(fv-R4DuFQ zgHoMu9EsZ&Uj+a=^T!7l0U6?I#R!#@Rlj9f!M8+=R~NKW&8X-8hHV}sxl)u3r#AV! zV5V-;h|~YSmDh%{IJR$j?V8BRasTN6U;~meND&$d(adF6+d8eZF8goR~&wCfD~dy2OaGW9cPSeLB-eC z2ja&`XxB(b82EKma%LN5G0(e)>GY26QpMfj(i+|6^g-hu0R-qOqeb@O@0VGIvt6wv zFKarR6mfH{fvCy3Om+ZV=|Sh0)=`=wpE0jQl;K1c*De7KhRtk1pJT1SuEcZFyqOXJ z*2=K?)bs&yrENL*(gRFl{UU(@n55l6uLmm?AZi47SE1ZMxhwJyH|BaPf1{!XGewig zf9L((=O26{c(`W#%m(Hf67lePbO)QKvmpg+}Qhf z0u`0==uH(St`XvsJNH8{Kd?1X>)FO;pTNZO%ic?|EnC;2k?FMhhFyup_8rU zl&;A(3?lo|^S0#sN)hv6_^0AX#&Svp>|CLZgC6?Xpp1072RNm&Y$x?B3c1}hgP?qC z)i1wB=o6yhmoI@f(0|d0^U8UUK4(@jbG;?)SjeSpaXAwAK z!kW4}3pdV5@Cm;|4->Z=JuVX?ClKH=2@3~p7uL<#66AHKs_RVoAn;hXBVO9jy15P~U#U}y~czXfm2|Gpr z$|lm8KmKJu3nUP!+`BIs?LBX;%AFI5)Z76_O+P-vN9ur3lHi~)zitQsD``Y=Mnkn$ zc*b5@e5#54SC%=SOG80AfCB8u<=K~W$9VFJ!uk>Xmd4azVoixT&a7T=R_Za1Tbo_@ zojr+s>?e4QzaxoonH!qR=e*WGV=c|+;j;dAa++v2=AtO~N8Zl<@^iT0Kv|AT0w(u8#aaTCf%nnYkd!RIsn-rc{i&!Uup705Yt@GR5 zSx(pJRY2<`RgrNBgMJ<@+ACFgQDojcn)DTrna_I}&WPeyKoN1~{%YrN-|X;zM@{65 z&p`}QGv^QJs@aPOzzLAzx5yvKnce!peSKe3aLQh1z!c6E(V_`SgeJ{@aB5v$P+@R5 zcb3>CQI@IQz4YIa!i*A2*_v<9F3l<+b4px&WZyP&_AXv0&npRVNRxb_T|>~zm1p(Z zaKy`6!$Gh1qdda!?~T(E$UQS#+FTlIn)&Ycsqf3{!uWUra!O)-V?oo53@-`Au-GlI zj(C+NyirP0*_c#tSXtb)yG|8&e>LL>25YSvCa)qeY<~@7XtvU%TdoB%X!{F92}BbB zR0_u;Ht*nU#RoiyIZH@XooyR+sd@}k4u}u(06AkxF4|gsy%dmm7Sp)_^@mjbVi!L` zQ~q&_mg`vE;Ox$D_<(q2;KAIsc6swwa{-49=_wLie5iLh_MEKQ2)=Li+#;kG z#1_pk^X=(}4ZH7$c%j?AVZrJq0ImUGP&^g1Yja|Y?G-$nr}xNk!g zsnSF>2K_3dq609y^hrSG!JzUbP;;RF(lj{`qZ^*8&b9uU-gv9_wb>t-}bl*KE&s(fQ`$nvi zUCJW9O-XVki{{IqKpDW%f-PXw*A$@yGXTLaW^U>AClt!()I}bny^ROF_^aYl^F8Lx z-Yf84RHh`HzZQGn1QOpSwE$ThVi|3Dccr}N|B&Jf@Hi!1!z16OSaErp0|*a0 zS~8h`*7RH=TG|1L^k=!k=YFS4_2?I7l|>IO&-8%7YDqch4NDIndj)7_`GD|{hDl?s zPmpZmYm{slOz}V{%WnyNQ$q^6fzQy*s=)n|#~NXh0Q{&MlkDUc{!#Y#45Zn_V8M@ij(+S<=Tl$3n2N^`Dof_Sj4gG{Y zHy+wK9Kb^N@bxHEoCAoSX-w zu1%wdK%Y-(B51Z4D%4ILn+u`mNY<*izO2?)Vlie%q>@HwvhkjBcl&;N>&);qSK%4? zGV>rua|1_f@~3k+iXkh1# zEiTP1zuUytHz6CA=~`jZPPp_3B01J|`BmpT5LnV9WGGuU<>DsH^^kFeo}ss@x9!4_ zq(sd>A%P%eH6T(j;oIqvSR(Y0XKcQ==)vJ4U$8IGakj)<5T`sf#k_g>!8EVZ-VJ-^ z2XxJBDo-q7j(ld0m_G3P7(;v&P;jSsS0|a041Xi@`x`z)hTam!LX>gVO*+xDzk92l zcVDtQcQUMAv`j=XD@M@U5(k7Q^hG$)W^ zQB>AVX1!OOgQWDkR?y5W9yuBkio^`?LQ4`-(xk)`(vbvmSaV;eJD}s6<-t>_h#SW< z3~d5UD-S8+1z;OXDHR&O4a^|-q(V1pXt{Qs85pXINCJ*|q3Iqpcn%W6k#k1Mg0g1Y z2IiX*GwUAN-XO+r?~pwT*XyQje4Z!Wo%0KC@voMGp72J`oT9b{oeEC>@G*3^#VZrE zdJM%CtgpLHlW&8Jy9s}9Le5dPGni7_O8_H{@X>0U#MKHBg zNzbz6#D1uEb?Pd`q+;G3#yL7RoQ};f-zaAs|9_Gq5%4~epQy1AE|^Vxaj_8oF~Yp@ zdV5^?-sb^)<=+-}oA(*sYv1?)vMDgBe_u5n4VCJ_PG9{R!I(Ay5bd;18aS`@qu`Xkg6PPA#hrX0fZbHTR=s%$0!UR<;-1Y7pMv!qwDS- z#h3fXdMj^&wct$4M=JZBkxbo?91aNqN?5V8L69mrGo+fM=^oJ zr+*;St)!8xO4#fTbz$ZJyI9;`eLG!2FDlszkic+f7UA9QVuqL5I$4oV?rtWT>vAup$)>!5qDHHB=~4j7JZUPW-{*lbWXg{vAjx@oYNwf(*mmA3gpSWC^{=y zFTdN>ORaT9$I`%N%-^Oxtp=2DW13(7Lmo?L zo7f+*fb_?kHDAW=RVg72mYnTOT&wy}G^Mcy^GwP9RCUwp9%)Mi)rBjh^OAtxIj`;= z!H>!R7SLp0;w%qQt>1hi7c2fp7MW85BRc1hIG%rNc>X)kYtK6`zzGYmoSYh>aBaA8 z3{AiublQzUwk{A+b*A@L?X53Z-5xLxU9)(@h#%3lu{W3$l#JmVn`}50%h1dlJlGI? z9xj`OBoGdL|6SwvJUZ_$HvoH?k=!{MO}}dMWs#ks>z%xkA_v_ujJe~Lo$y<031dn8 z1^zc8WPToOyEWA4b%_PFHivK=3?|PJ+_j~zSn=J(nLDOFP%*fd0^OVa?98W(Uwr6Ifjza(HqB!*?&PRFzB+Do}Lq)5*__km)`0N)r&> zeD3GMj5h_6<*2z(n6LlqZqBTr|F)pthhG#FH%svbO)6M168#10H>-ocEl^C+-MnUx zmhfB8yvmIHi6_TZ=c*i0sgPVrmlJuDWMsWEuP#m{dp}seVDs$S54VKRyML68R>cNm zjOLZ+i6cU-cGH=sr|a7j1C|BSYt94|3U!*}4GLuw<;i7sSnaDBYt`RLm>(rA1O?#t zQY_w{v_y>fum>We^WG+Lx`34!n4Q(#3^7Dwi+hHxA4L_N0rf>d4-XjEg&%TW|8QEg zCND+z9i^%0m+ODNDLm(3LKl66Ta~d&0|1EVfkjke_Iw4c-ljYwPyy3 zLwY7BcV>Szy$1u~+B5C~>U!mOk{0dy7cs%b_tIq2vGBzfW-U-dmL3oNJqx?w# z79%lEp~toNlqU}nicF^(gGeAe#Ww&!xT7n)`+ffJAjX zSpiQ$qo#W(N9SPwB0un?@CYzdPDNPGC(q9@wR9MXJ#c{Ix?k0XsAOdKeqKh{{xLB> zk$(z3?8E9{z7Kdy{TcI|7B%Tl`ok?1FPeBzPXmqjz5-O4Wz-$WG9?|CTjJ&CN{a;v z6MU9Iv*x5yE+bqFxD?W6Q-rCa;MF{aX^^rx`ut!}
    O%T(FMkP(()kl|+?L;|E0|V5|edSuvjdMaFXa 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%0AO(<=v+L3b3xwy4<_RM^x}!ZvqT+CtNR<`-o_8< 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%0AEUqln3q3TH#NYXz(*!76-Ir^I z0x;sQpNY$Fyu9&d@LaU~8{RY&8fzRSw*6udEg4QcqeD@59^Us6&%a%z7+t~u;=|=1 zj5ONnM3mQ8tMC*$O(DFye`g$=5!cOgx(+|*AAMB8(bJQ?YGCA>-g4J<#E|cI4!4&b z9)GJ}MeT)5bFR6z=C@6YC#fm4A|_Hv=i0-ZHhYKW*E13u-7cNT9LN{Zcq$LA47b_6 z8{>8icbXi=h7An+jfaml0b!gax;B0ONGqjwXx@da3aw^rLv*~k#MtlA;P2*jg_sW> z5yT-w@79Y$8q%=|jKqZ(W?f5IE9uD|F3M?2BZRnI%L#@Vg0ZiOy~z!E(Ulz~yIi&v zLW{OdA_*l|(wJ@iD0Q^TQ!~Xybdt!nTaj~ErZ1MzzH@ROEc3jqd%ncwja8#ZBBFo^ z6{;N8I)5J2Ez53qQv9v(M{x)WuJ3-`A!Cxt{a* zaz<`&n8%*Uf72W9U5EG8DPFs(BqtgCa5erxB>J8h&~A<_vUPtLbtY34E3vd>5U!)a zLE9L-5+6016hD?&P>vlNv)z3Iy0mA8#V6b{QF`x3F@FxmIlPR9yZsB#|G`?-J@NUGN^u1$AFeJ(;shtgr z;ub74+bx#L<{xgfhp(!O{y_wf>nMZ^nW*rIY|_Qk)!x5@rcINJY>tP1WljkWc%lP5 z1Na@JUNtM2LZ}EV4>-`{?eitmCEOwhzlF@5IW%!e!$^yM`ZSL93HGScwZ{@oMQRCE z1>xT}9Y49KsOIT8T)HC=?eghb_!QEU0s6j}WIE?b^mMjQl|C%S6@bFYII=32CRfmJ zf@j&yg`N_A{ifXqI?W6K2MTE)+%{C%(Sb(B|EUv;uSKkl+W4w1W% zrQO_;W?1EUoBd>0?S=XtuRwTfKIht{4DZGiDhQjcO##zoM%~1lHy>?$0T>GqSUO7g3<=KSg^5ZXNKH5?fX zWnY}oCMb1)iyHs`R6mUQ&$_^gZH}~(P;8;LvpcnJn2;xt)`Qe#>TFOxb*w{N$8*862CCt|}I3NiTUhYM^xf zX{5H&;m;f8Mhz!D4FXF=w__t>JD1E}c^JEd4BTQ)Obe8^2~)ckjL<0MQL^I7D%R|F zOE=saAKUkmHd+M7&NK!`QxNX{H(G)x`JA=KwD+Dld6dOnDR64C8it#j%%3 z*DN(k^oSl!nT+FC52W{?ar>W`2Na`Y;+FXg(T4Vn9$dn5>TP2^ zy*-|Ni1dRLn;7{=qoW7c#E<0I%f!rn64POeWzQ4WdSarJ z+_-kXR`CCZMnYcrREA=Vbs0N!iWn5XGs#YA7898Y_oeuFIMs8YVxI#50TA?lDaj0t zf1r4q=dMq&e$MDkQ;%-A`A^M+wyr)N=SMYQHweu(J=|e&jdsXw!q0CYAF^g21SXQ^ z4E3UW)7TFNd1m3n&)5NRsWamUZwP=v`D^nN{Sg10Ni6P8X3| zb)_{pz<31tbo5UbK2mI7$^~DUpsT}Vmae}o9qx6_S+?(g?@K+&JW2wK2m`GSSOGG+ zeD&Jsxo9UToCzO-nVXt1snjQZW=+LX0FgcaVW{cBC-xE-u;H`d)eosZ8&J&z;_+(# z$pk!+V@>`L(-XYd0RFRFohS;LPfAbv4FibW;}Er(qD7xldoxk>`KLE~d-|O1GkQO8 z+=-6Rb8Fu{}(`Z9&7>PnKaQoL&a%phyOVSXjDc1Xs&ZT%9TM3Soj zj9f8N&0QY9_2Ro1*n#6fC!CqGhx28{#883J8g*xrf#9YVPYf zCRJNyC8LFOiqfG}`SUj`%Ijfc>=6!(K`e`Z#vbbYz}KhW*6G0k>Fh%!<|Gz5c% zzM)}VJKNOwZbk}MEB_2tA=>#!dD45>ago~p@TJu@;6Pd)zgsfBnlR^u1cWl?@xf<$5;Bq1Gr6aah50O~KEZI^Yk!j%b>$^vK8RMGWjQ9+E zm6DSzf74wQ#?%0*yZNwuMY8W;54u4&Nb5^hetS%T&$k~mH^6g=<*A&ETxXzmvS%T% z0(l3dEuY$RwYZ+X!kKOV7f6Gims5psMi!}dIQwo$egTZ6@V`OcDN6?)UyEky;qL=p zKmXE0>GgyXTcXdz8hDN@;Dxa}kT30b{L*Uh3g6EixgD*^0;fqQR#-Woo|{uR263qr zf|g0m`CwW7prAe7hTNLP(}DXW5I%7LlWeupT(y1bWzWvx&>SL;>Iz`>qlL~5KTeui zUDz1vbtGao>>BPM$c{td<}BUrjpr;39hQaR(c^IzxLK7@U}OliDsQrr zI)t1U0_y6c+3v`zGDvP0Yj>ca*v#*=;HwKWhH$rm`tYr=z8ybj7REFf9ezxhJaJt; z!!v3%H$%Z{oMy1n$X!>5#L(c7cn}pn9ZWZDRo>mfQc9%j@d(Vz>4~CfbjGIN=kFAO z%`VpRa!7e&QJk{Pg)9-bQxQ?hQis`N{h)yJRf#RP9?q|x%U}&7v1*iR9}l=IkBSK7 z!su9K0Zr6rVfg#12$3$x3=3-Xt6U*ocWkhd97IK;NSaaf;ZD95{@@t8!Oiycx8$mP z;|OkXssza6A@HQ-OLqC_Ulbe6gVZC%45e1QigmF3XE0-3zW3lb&Sb{{uTR3o!OmOJ z4Wx+U&G&T0zwXgarcvWMrl*{J7nvFRK8};Y6aVOq3-$hmMpt_!0llK@V7O{k*3{RT zzz#BL#hnO0XVgcc=jXn4U-dthy1*gZv$9Qn=%d*F%Nz|>1C~Z94DS7;fWVsh5^^n& zM2^Ca1ee=&I}k?r-S=hAl0Xs(_DrDD4XWW8>xS$TG-X7}=R$ieP2~4u1CaQid^4Ie zl<-80q+-v>Bl`?8*nC}m5v73MT+N?U!C4IQmNAp6T5dC1>tIU<>A9>7)^wgXb zCnir!k{UBf=Y~Q1uzWqzy}SBsX zvn1lEg4_=x+2WFS$h;(g|Ncti2spj4dW}AGVXd+B0S=<3hUxq5LcS%W-%g!h(yR-$EO#XLtPICE}1}Y~2_E7boJ*z|8{y(8G3rEI6eNM-c zatMr#0qCqPqc2{J=ZTs9^^j~b%SJod$)C0jn!n^r0?RlYyAM{7`2XtSUOsRl6(&n0 zsSKZnxb^w38-oN}s>$p?Su{Er?@F(NQ$gZcN)XoHX+rjsA7EpX=1s8fU5^G~pSUo} zH(Rdj$gEA_EhVR}AS50pxRI4h3!EvPXha+%*fl#=?7Y@^e2ARYn=6l-tl{+L3B}1y zgcGp|7I)Y_2SK|iG_B9`gF<4R6`DA{1ova(Au=8R^Xw#Uk_d#;A?erPC~uT0OEI0* z^t4*h${{}3BM&_*f?Hk-%(q<+Stf8CVmfQ=j(1=b|osBc~9OJy$i z8VnWqEwI3mZYegfq#Hn4<#89h{(v)|q~oz;^y>V))9ZIMe_Ectq<+* zfIId6oV`j1EP{vcZ}xrzUHS9pT>;9qx>u)Qx!tavU-}=_-Nt*2KZ4(Nq-iSxko7Q` z%!T;}IY|+QIh#u?u!dm3ur3;2Tq8zdmhX36Z*^riBmvtn46bxFu0FMnUI$ZZknE>G zl$D0i==m9`?gmGx*H!$Gb^;LbxqSO4f$Ri0BNT`U{$S z+8xOJ4GKAfRc;Ukf1QusJ^Sl?v@0&=uH`0`Z$kN=@8bR}hAdV0DcE+G3lN%qb~dIE z%Sl;=Pru8R`@F>Me4I27Fu}QYxoW`2ndVohCn9zZ8$tObEn{7Rq*h?Q(!cy`sKd`_)ft2 zSPF%?ifQvW`9McQ5|Dn%lCjXcQbX{3dUSJep6hSW`A2bTumzj(49K% zeQF1!FtuPHW>~zg?xFs2Wwzy~I`{hrgx@vi{a}(UtLm%nx~iOLYO=luLB#u{&_61XiZA~wDOubzx5}{Yj2K^kuKEw_jIJPGyy1_>8pgbo&F?j|s!vgFsLmoW zSO@9nt^JRD=~tU<#dM4zYO&^N0dvWL05!SMuT?p;xfqNv9%K#;{lsT?OE7n~YM5W9 zE7`IC!}#a@`7Q*#FFX2%*8ITI&0Tl!KtoY~ts(uI2b}1Jxx?^-N+*}+5=0@CLE+|| z4Vt}quJ@~Kiry0*1u#O(cd=JP*_VJ=hSZ%yvSo+lA(G-_hHVw*&r&hb25E+Dz%C3W zrNH6#(1T?S2PFa?I_3YC@w=N_k2x;Lz!QC-t>5@2B?1~ zJz$vx4f+2TIK{j2&TdWPCDx%KXSI5;hq=P>eW>f8b^OrZ zdwrg?3Anw1g{bVe!vi&5!qO_L6}gkbjvl%V)><9foqLz;Zanpwe2zf$v4b!->X{io0~1 zIoQ1AqeSM#5zl~?sk?vGH+3)nLap%6#}3aHAzsRZOZL~tzny5xjd@mK4nGiQq=^zW zl7yfma2dlNl+eW;9RM}Ra~O1!CiNXZ^PY@GMHi$d48A|}W%64mc#!?>RVjtkE0TWa zF=Po?2wHrpy0>LV*u?%xE(ttCfcA;8*@>6?rP;(G9 zYpI2uQt4viRN|h-!^I29ZjEj1ffw@n9IjoJY_-hMFCC4_7i@L!ba=-GlX^CnY?_U3 zQ>!b|3a_{XPfN^s-`0_o_4pp?TZG6X1Q*7!0QYArFh60ba;OM-Xef(|vOf_#`UT9KRYF5BBL zD+dKe1Ct+RYc>5AC%%59T7Q_KT5~zi(l5{JV@D>=2MxKm-{pPx-EFtAU-!HFedy1zq#&JhasuNvkc}^u5m2+eRGYM7{q%wFbiYdz?+VDhq&O;7OnmM z8KFrM8-A3~+26o2#(q)&4 zmz%f1c}d+jFx~I5|{=RcGvyi?anfLK&;sVqW)rZe6cE zhu_6j^(a_zvzL!sJ~?fj%dUyhOX#&ks1?8(ZQ*RJJT8&T`~`+Ht8x3=I`9wXk;K^L z>u#dD%@U|E`M7q^Ox50mV&ai622V}sU=4gl?uYpAmCx54*3-2XgOy>;oB}Qnozs+N zG=UJ92(4Z@@Uk){9bvpLJ@{!)xJJ1&h7t0|z5BVYaRFnr0RKGjo>L(jI`=Govz8L% zZ@F=an$v1xXZ~s4R;r0f`o%LCa+K%a8e*ZRCCM5V-DJD{X;qN$xy<#BC7^^$5k~Ts zgVgyWx}T@a*Ox_=>VKElCzsH+y1P1~uDr-BB2i|KrmCv-7G~|-*41s$X)3%fm$aP+ zM_zo$3(K2ik6l)!N&$9?aOWvQ@Pj1R5=kd^3p^u3AdBpyUMD1e^^oIrkWsEy_&AK^_ z0&QIw8?d+*vy?7uy_r3};0p|FNM)j3pRT4ztSeF-G3_&=bS?YZgYO{D6HZo1!D^!7 zOgd1HwDQqW0JokqW4Q$50$_Izw)F1<8O?y4(YxDN%bTI^$GLP;GcSX+pXi89&?2J| z_;e2Pz&W6g9OYS#7C6i10GR9)GLLe=dKiu%EhelLn9ionExuJ?n{HGfG~E!qRq@cr zb&8o(b^4oSaK)5Ebhj37Y=|6n+D(|Qd4H;hudc;bhw`u1-f(Nd!q3Vh9mnazDbV@{ z2zO==-;2djYKn@vIR!sA8;6jBTKyYLxVx{D?NW;uUhH0j#ZIUceE}l!T&M`^bJ^5R zYmwsHP5J=O<|vO-jArUiyT@*Mk6s2E6s`tnmYszwFufn2O}2xaFTk7><3#>HuKqeI z%C~DDhiQ=kB!;0I0hIxP0i?TBN~KFck?!u68W2!WIt7)^p%Ek$>6D>c>2CO)c>DRj z&w5$9Tnqk?xvn$zKK2pKJuZr~COB2Q2iVva&w#T?y=~H6f-nXtmESyB=*Jvk1wj6F zN7nWd%&KStE-bg!QA z5`H0n%3q(Nfk0az2!I>dkrmN5O^q&dI6)RJr@DW026pI}mqxf9u4O%1?dGQNMeP^d11WIf;3f(8MLYqhLyKvk-7ggz7x<_>PNc(I|f$yjP+ zAwS%3#6}Z$%Dv53nx*3J&pe{>d<8OV+#-2BPL&a>eMfivKefId_mjIxR4J+RK&`(; z+@|?Z>P?C$sXht+YT4Y~y1pOvWCU$R-x3(EPx`cfCw-bVe&Zv57#wI@#9mL}UoWL0 zww(xt1SYPqHLd+3y=Es*Ucw+1=YvyVD2FtMhT=#&WaP?QGZlxo3O43$SRd(QUz!Z+ zoHr7Wp=D_0nUmKF+Lsj0Pt<)x!ed^&o-ZPYRWXiwximCkkH_fE31$WKee|d|7Bv$} zkqQihaMF3=A(b1c{5MqH>JM4FHS~Y+a}w6vsCp-^aD+HPX09Z60-h#+!6%=Bp0hG? z+*zX=Msk5|uC~*!L!B^j#ct&U%<0mF=~Mk5ZqhY~C#(v@Mf7ve?x}N2lQd^AIk6Q- zfy}Y?mm>Mn)jsD48@eVgLpmp z0K@nK=*!fh5%qHt?gUfZ%@~)&KKMRJET;{d&_@$TMv6raB{?goG!NPjay?0}2Ru*j z5P0>z1OyXMA3ep#j%>$z_ax3L@7wrdC7>s(esZlTd7Y`lMu2r=t`0cgOHQ#gX4Dxc zI2p--|0trDU>5*auK(ftA~S?u?k99!q}zNn92Jc4V(>%Ve9Ox>v5;)e?_F^jCV}Se zDbk%;H47U6gi5HqX~%gvQFJ`R0sI6HKV`OWZWJt8-Lu4=RDfnrbPd`BV^?9M%l4Sf zWUlaQ2U-`%mrkj?kjxLDxri4;HFAz0Kd?GqgUND+dk`KI;*vMZZ}@IJky}}V>>RR) z^odsC`r-?$)8oZt@9p#XA^cxlLvviv)lZ3clA@xcRUEgw9D()!YKqriw$Yy(KE>`8 z8iPWS#l3FYej4G2j*z<8v~Tch!{Mmbe+A&?{ntiH^%1Z*yn*h#x zB}IBAnDb}7 zO%r1zxn`4p_!VrK-JZuY0NF6J;N6vf?*2a(<{qU~X7poLE3yH;yCWOyiAA|5MXvRM zu*}yQ$7Un~EVmieUY6xh>qNn-YqFROz%Vp0y=do%>!q2+i%nf%uo6Wx-z3ZYqahSi zFvq-nYNr|!O5@)D!Ax{(g@AzFkHS8GzG$jus#D!#A7h(uTdZ!%C7T*SQ^$x)C@GT@ z@Cu+v#iShb*TR83xuU<$@<+gJ!yKnkGZbWjw0!SW1%-~M^g*}|fDw_>mEPX2<% zMKUYjM-wx}7?k~3`v%=d94Zb|URChSv5}}2zQKO99W>L6Aku+9AbW|+D}UW~mgqT;UL~kYD;fyqr3{9?phg8Na^d!}lT%niWLIF)J$Aa) zW;-)va~l&y)S>`g^dzimuu=Gm>ao~gc;ZfuTgaVVU1$%QFd@#;H#MRtik5_(Lqf}z zott%AD)K9VB^pvYR94|<47ha@miM-~tPuV;#kGCuaLGjnOlcd z%B0lt9{)`;i4SJHj#r?`#{WzKIODDTW>1pREr<2IDd=k!bpwJN{-Qu|zJEYS9hwLX zeQET*(P1CvkdpaHJO{hE+6AFso!eteK+ia>0C&*tH{H!UUWnpk8=IgRn_w90!E$LZ zz_?qmV=GFabQ^6q%&x_38?65sf+n?srO5V)t6~~|LyxVVA|hlUo)Mp*>T75bXoxqF z2QDzhl9fi;dG-!VCG`kH$3=o<^jFls=+?J_8ZgZUOk|q@5zuXzU@W30L)gXm*95_l zcwG}33y_0DugSsLT3_x1MtD|RCq)=5kg30YBqu# zvtR%yUw59JC*NPrzxk0+#B|!U6eKxmU^PR$VCkA8Dcp2Tb62e`cFE@fQ$n;?U@O#~fC-;|g{Bkj`UM?i;**MBmx z5ja<^6ypi%+d_#5uhwlEJ|@nO_XW0HH#9RdSznUV!`#*}wT6dNb;G zWNVd3!sIX?4*YtO7&0G!h}QhD*~9Y%(8~2(QWNtrYC$QW{qLN$`Av-(lk@S7bIaCz ziDX0yH~3UPciB!OY>D5q+4|Q9EpYU-UskqzHs>MFYb;=6$`}$1J9M_VGGZ_BO(Wt=v+pL0% zWe^dnM-Qf%c4ih?^Onz_hMiqgYO06j3x4HR9oS~Sq?OHz)))?Q5}ghM{!?M-hCa_4 zLLH()Y2Z4ov280_x|H5yPg1K-kCbW*$HGersNjU|!wK4!$}CGCPHfkZBbBCtJ7za? zow0R~$bpw$4QHtb8FEid`E2V}1|Zs?p_yeh^Pg2;vT!L{&M9_c++4z5gS z>_a%PBY1fG$2+pNg#l0`{p_roo^PnK0q2B6D@7&AV1t1^{3`F9fj-Hd1H8 zauSSc*A-9Vf6EkYyT5s8y^7m5lieN(U%X1I1Rv5ot+|?Jvtz%KPLc84o#c}F`?XyEeYPT9!+2S%uWc6la+294!t!oV~L@xpW&E@7^k^gwl7K&f`f0+H9qn{bFsvNKpUzzaf#XDXei-G6H7S zIRLq=A27`h{+lZzVxBCoVynD>e$mkL4gIVEnHBnrZ9kFD__mqG>-iFu_~wBG&v((% zhEX({iJkdt1H5Zm!&o)qmqPW;j>CBF6o!mEnFDW(bDmEwU1tRzWc8!XfoQ_FrDC;w zOUqq-d&3%PAQm$*#|^aqFQJR$5fii1Qd!^Vsn@$@XcSgfC^>CBa2^D2=G$W4{!snT zF+?6rgMxE_W61u4&QrCuxU&C8tFV&%qUsg>?x?H-Q$$raHptPa;_t`wbGRM>@>h5x zvna3Zvqw>jX_wyH+1X&V!fk~HSgiT}AS`|ALxb#;As~!QC2QM2d^*0m=EL#I-URBM z;!9`{8bn38Vb`lOSy5O8u37%N`)l1?QAy#4Zxoj1wGsT!S=K$PSJiRxj1 zEeT;Bc^Icx)!Ow9aXk?Cp9RE`e887zbue${y7|pe{wS7ccZvXwT_~%P|Nr*^Gx(%M zWLy!KJ|rG^;~|Q|pi`;Rd=fT)#{^_-C7*#lf3SJ*z#;eQyFI`D-XH_#X7L?0x!bg?#PmE*&Q5QQaX{kEN z(knaKfG_fD)s6T4lB(+$&Pz2Q>yE+&nxBz}|8uVcn8VKhj}>9Hn8TQogx~1rN=~2D z6TdZ9LI98r!jfOt>V*fAsB14^kaJ0mbviJ=b-NP72cydA_#^~;&lH%wumqJRRN&SM zzD|}6Q&+M8a8bwRi5RsjNG|-Yb3zSGwFcg|x3g+-TY{ov}(Gx-HY zfIL`Bls#)(50~x3HkR+ZnIT&g5bf8lMF3udkJyy;`U! zE4XvSTFL_X>jXigLM7C8GKFzC8#b_}!)h_?m418fs$nZ16b_v`SbtS+A1>laD;)#_ zVSzUWAW@>$Y7UU=(QtAR;)fS=e|6- zIV+;arGf>5w)O>sW8A~$;g&vosD@CAOx)Qf4}F+_6G7-~bymxeITQuR&JKc-L%Cyf zq6H^+ErZYQUV89VG^S)MwRnNO{HkB4*LPK9uqRBTe&8j7<=`p!>!WZs6xF+zKk#zf z$p@(7{J6*EVsU4(NIzX+;i<3o!=(R@Sx4;?QwN*t1gaICD@%d4ga6SSb_3str&{h$ zjKHAY^E_nn0$=uENTruIPfZRuB-;O@ya{mF^wtBgK8!{Zs zxke&KBa(EmUX`JCAku71L0!E#rj<=dNijPnyT48D-22bY)_dEN4*0ko zrI?|q)!+07acW?2f}^a%n)KrZ8JOrqmV!ph3hl6$D-3rwezc9*<)XJjz=G|MA24je zA&@VYwtX?RPD6v7h@F1xLLlHe^V7orE@$+6u_JF9q+d`nNGa@d-U2G7 zsrAwZmAexD zYvXL1Xe@Y7V0xTX@{k^$9Jc^F<5b{oZ2jd46hUzde&3;dnRHiaCbG* zrZuxPPym%y)PFK~Z*`)|=l3J9oMy1?b8x@>k4>nX6pr62Wr8AURVV+JjW6(V(LD}0 zQS`;{LpQl3SfKlpT_yfvxu6j}$GK-SOaL)iIA%niw39x`q|b z1$gdO&)`8F&_OVd1Y5Y?`i5-I*LcAPH7(+)%)?Hu?9;so)e%IUR}$$1P2%BIfcimX z$4Fpe%VNv2X3oFrM2isvwgY8<%9}9$iF{YEl=N5mJjo0h?(t7#gu0M}iVwplB)!|H z%>*S+381)RBL_wL-QVE<^wuatso8v1>Z(~;ErWI-KdXmGrdgH?e zHU*F{W5r{jnuvfIm2_S)Wbyitf<{)clavS=nJn80bMLyc=*%mO?8vCL(}X^s2-j<> z&Xzw#=CbnK(_OboQj*Cx56HxNmH*lp+`i&rnZW}KusI~exe{a1)g)EtK_c!U>V1O3S6zB4E8p0Z0>S@ z$(RLiAHD6Czm6etc@YqJIYc6mRf4zVM047ACa%+jvnsJiG^@7r`{Cf(``kJIHwZ#^ zT6%Y6T+ACag?0`Vr|)B;n)DaV#?qbXo{73z{*NKG^TxUFwOanAcu6opyC%{4yV_6Sd=$5Xo><| zSS}|Ti3~CIa#Q4^B4l%WtdAZhPsGm}kR{*C%-i^Vy!ErvC+*mqW8Pn_qfl^bPl$^V zYk2h?&XizfYH?J}OADN3KG4zI;g7tqBsngAd4^ZjMif_#p<-U`zNf7~#Nko#3 z0|*thx#lRqFY$YD?UhO~t@TBn>n`D|TV|}FbIefxvQT}zc25bdm*4L=`m9?JIqh@* zF-`g-nnk-Dp?j0j&7%>vFNvVx*0$l@Ujh&$HDo1I*EcwoWWoP#@SJ3Ys0T^Pif4~= z++M$s9tM5zGAn*26&Av7nwq-7!FhWvEoC%q{nOjxpQE(k(Q1r`XTM?cc%O{&#&*oH z7;sL_0JFZGzMt{jiFIYBmiQV8`tK@l7Du+)-W$l?fI(kO3_H~^FrLBR@r`YzF72Ew|iRocUFq*L%Q@^ z5Hg)L-|=^Jp!tO?ysefYs`J_ zmtTZvkOL8O_Pxdzn;$v_{i;nyMoS*GFWck{5Yix-bOMs2MD*w$E11fkwz(@~-6h(s z>9>q}MNPn6Bpp=&IOSf0jz*0;M{wB8o~7foceqlGvvoRI4ZCkL6`i}HwKw_8^66OY|P=IpYV zCOLpFa@-bKnmAUu8P1MBz^ngXj?=WLQ;->mq#^PZw+e&E`fiF%22bFe(;V|}3)XE& z6p-MSYGrkvSniMW1saVh2RVG-nSbz`YBYsY%>DJg3VGXNi3<14Gi3I{yM{l~fgJ}f zoxY`@bo$Q$$sA%y2A`gi+TvtTh!XSeH~ma23m&AODhb=Y@1*wye9RnHjj>-97wR>w zpV_Wy3s^7l^>CWn6|3^^hVXiGG7~Vr)2}Abi#Cjab&O?~J|Q!h079^_p+oUaJ69;5 zQtJ(Ob%zx;n*0+A0@a?$m6bhqHu?|su+YME8T)uoOyvAe=SO`qmf1`lBo4#^t@P4! zg=>H%H@JHY_1YVx1q-UN=Si9s6xX#0CkBf#3*GM!c2@a9?pwuZ+Z$8nOyDS9{PtSA z3TBkThbMsT_5b3XZp0(n8e@{@rWIlbVp*h)h#ENwubwXVn~lH+$Gq)2GB}uPfeUg< zc(XrD+)bsEacrR|ZQ)VA-l4tti6JFV)}9~56z}H=AkLxOJ#DeS#xKm%Y^fSq{Rxq- zA^{y+>z%gO?V%(q@iz+DOz42caG$^X%R~QAlfCAKJu>uYaS)Sf<*!@~`yg4z!{=6< ztBKJ|533J$#>O)7-Z50(2Vs6Gi3wZg?^Fdqkk(A5&^rS;=HM4ErUc4q^G`|zueFAu z3c1Cyfj^L3X#x@5Ei0hEuyheNmXnSzER?c;HgT&Vq$77zs^-cLI1=Y(WbR!e>gW^z z#VPMLR?s#2e=n&3p#Q3mcWc@@g-87rW}X&FeWGG)kOS`Ms8L{!<+*=<(&wGJjy2Gw z`_thr#=~kC5jQf%Ccla2yqOev zb-9TtSOSt-Z-QYtB3t2<_18w#k|HKtFG(q7=I%~sBj@`{QaC}0^{;qd!+Y}?RiTtw ziK%ynKZ}LS0FM*AFFXPE8qYr`C_u-Q6j$sp(%Fa%HWc8Fk4)a$k%x+P0K8fmVEp&3 z!n^L4^b;e-Rt{;EE;7f^DSlX$neYxw_H*8~b$Hfw zPS&+*#qExt^9mmdsE7Re1@}q1S8ki3kv4M}`KN^B-@5ETAon%gz#GlZ8J^A<`|2KMDDr4_s6~ zz%`i(DsFGUmG{tL9{N#Oj=r1?mE}u&)5ouN>!c>(#aP zyCTb|kQiRA?9Skgf;>mMDWe3^&*YqR5+MxOHx^u(^7L)w5xtD__%+}HBd!W%68nB^pftzqR8p@o}^Q+5MA!%cDF=g^g}OaUR6xd zgLUA)I7B~mJ_6IJpqd38@w~>yc667togBX)4 zm8Jef@N*8xWdcZ*ko}xBTEj80+S92%?sU(J9{pyj_$6>}{F;Un17dnSXUV+y)wS*d zqRyU$%f?V{k;BwruXymZ%>hW`=sl|d*69&|#YTfAuygl*q1Y=ZK}mE3U*$2z;GtfjR_u6RLo4|-+uW}>A$+)tv=WY1^f$;V45V9Aq}aXDpxlHf$FRAp$kj_ zrW%i4Rye1MpTG}lMYftMlX|SRNdEfu@JBwYpTk{gfb@42lQb&mGuZ~*%Ve75gL>&d znmDZ{hR4_|VCIe#sN~8`T*AIJyML;5dHE@3;+475%)TQjvPUd1NF+%~-zeFo_qc*2 z^o!N%X;R3XkyMd`+MAdOqKaSb)hU2;&kS{=!;pwk+no2 zGTgw}M+^qx3|GcCE+J_nV84C_Np#{03UGaF@!puMfD_k2yxJG*$ME4x!5}Ob*TF;7 zFArKdzzp>#G{P(7AiDM({>8c-{0aOEY=*KT^!UsN>OFa~aZ@fhsm95XrKooh@10Oh^_A7~ZBg7IxWTn8CZbJ@fCfd((VYZ{y zZMDM37o&Hjn&VhAlhu9c?IQfjlH6(oO|&k%VC@dbbv5tha>C96)dG3?m+q&|Nx*fb z&ojUT*}mv;nfg2k+W7K6Q(ih2h{vNH%HxYwQm9QK&N{H zw3rOCS&O`b%P7ZTlBCLRqU_Ac`(6f3bXU_NCr#{ls}CH=31pW&E5Crfruc8T^|RdN zMq|_wiNBVmxHXo zQpSD)f^+Dq1{Zzj8Z|NA4wN17AqZS4X=+Zm2y|`PZ4m}{kq$)rlZ(UzExuvE#3_@+ z0NaqUTwUgfR6nq>1#|ZHzL*t#oml->LV~JP+!!o>S)>o^s-QVFey|kzR9gT(N`UW& zH)GoDw;g^FjNe6;kMHiJJ~79uubSA_A4trDso`F1(Q&J#s zE?e^2y*eIw&AoMSd~hE;0LA~#s+UDEMy06=TYnnElIP>igWrAF0BcLvh;5;RM&4EA6$GJOKL~& z9uKS3p6~^=swMSfo!M4)`31YUpaq6?hCT^mpfzX>1_^3#;Xmw=SH7PtvxPQ%uu~&z z_&IeP;cXXKQ+;B@>zL_^L};~4STn`7)mw_3iUUW$0sw85Ckc{1fUxY~Hz4dTi=^K| z&Y(&7+W`5illjFO5ry9oZ4S}~kd^zOT*m@|BOHlZ{FA{-GPa@KP3eej_E^gt&K5s% z+-63OE0ejq6IUv$S4&nOy}`jVI``kn)Ifz56UQxPs6a$})(;8v^q(69J&q#|CL%@8 zB0V|mljXxTt)1N{Zx7ESVy(jwphfsOx+Z7jVT6zAE>w>@Ifao_*?f@gfYy6XVfo&c z!s>85NbhlcCYsMhEa5z6mg6$<<(C+m=063N%Yq_;7c>H2Z+8~dXy|ZQ;#M^Wmrit0_%-&=1yuxj^LU}xpl}Ry>qRsmib2o(tqTk zrd&hfYvRtUp0mocTP-(M4~4?*l1A|crmiqEspUgVfGKfqzTRB#D$YfI-`*1COv_KM z{gKRP5B-B7O>>oogewM|vD?ad-x|;_V+#N{w}>dOU_GZ>?k~#wyF^!aaxv z%^S?S$9$|ov2=EGY8U7Gbq)Hnu8qs;*L%6G<;E~rM!IZH!0G??86gfZyBXrY&nxfQ z&NuC~A#5~Vk??Ya07zd>36bVFayXl>y{T}a#CJQv~CU~P|=$O1S6#GhE4}f3+^z+ z5ghO=;RMp@vbLkT6EY$lZnwPb_Mvr?b>FE7GSj7`zX6MQ+8(F;#9YRCfv<+f_`m}( z?_1nv(zYvlU`AGEt0_12V%D`@Q4h7Jdw7d;?ZP zbVp9H0_LP0?`xW4RcuBersvU+vSY8G($iy^zfq>ns?m1*hULUdN(p$LKe-D8Y}E7_ zFUpNx>-lIB26;TYiz+`1EL13py#lUyLTzwY`F)*6YTUVGPN48d`Zvnc#8?yU&9D)5 zUpz}NAfHP0T|j_v_cop%e|c@XMm?F72kiY({_g5eC+%jH6Yab~h70_55BtxbBuG_t z{eezedx^eo?+oC$&L@t3UTl;>sp=a-tx=iEM{FHhdnW;qbVQQsZ^|b_H(-!53AUL z0UOjROq9WX;n&9CAo#TgZp8`t8sW==rUHo5Yo9TNb7X`8yGfl~gS&iB?YBoxzWBJE zim@&vs7F*(n#?jy2J6QtXf=n*lsr1|`}O3z#hw;g-N6H=Q9&>wM$;~5A$cybL@np6 zpA8}8)i>7Jb?FG~!fgirnMs>_3I$EjaAO){+)y&+GJ2gc_Wpye(8JM$wS(~A9}3DF zguE`0E1s@1PoF)+UH(G^{v`Jl>v-7NI$K|y=QqKseT-zkR#Ox#6%FoI30N?fk@z>= z3{{eWx}fQ<=yt{;caEwB8>$4GZ>PA%O43esw z#Z0z7)|s7!!XR$Wa=&9xlylvmx)JmF`+X#4P5;G~!@2YKohSR`03g)u+-;2mb=Or! z0XaVGsOM&IUEHP$RFEPYam(lseV7O$2*ec#Nu`W0K}f4DIADe;NO6nBx^YgM6ocXy%V5eH(( zTu49lxOD;rSEg1rl`xIo^xaE|UgNOQ>i&MMjvxne9d$NDyUGbXWRkr!z#uf6*KU|5 zF}J_HmqPozT5bT#om?M-81l7-It}(YN5}goFD7O|VOk>)=(Ulm};qF;AM*Prtp_y}C?&@~&GaP4|NAT_AC1IEPehbtCm7JPsUxCXg z#%6||$HV0cIr0@#St(0L9k~*DioPb(&KXllw@&?z&U~mOy)Yo3^2CqsnZPL(?@XXs z{4WBo>iFc}Z$5B{HYMHmQ?X+fqYQHIHCChAy5G+UDPpIt?((LEJeX>c5gIEMEUh0m zb)eNBr(b4&z{#*h!FB&YaGRs$OowEX3U*oeBpSk?IOpg{ag23LXw6nHUv@mx*BRKB zzGu`yb8$&`M%@%4fH`tnW8Ehgb|K-1=QGPw@?0`Uf$_+CF~ml15vU?rR+!4GYr1N^ zi5zv)hc;cp7ed$~ED?1EDaLbcCEN~2qja8$*{%4qxht*xi8TWt<>oCNI$cJg6qQ+^hWmpXkTS_J+ZP)JCS96#q zt-jQU8@dovBzWrg%bDnAS*%7P+7yY!gbcql{QB*ZLsyfwWEvfyUDq2NXuYxJzpOYxbH}$fAvzX+@-KJgXPMkKMZc~J zM2df+({E@d^ohYOX)=4oYS7%~Ksq|UXEs|>s)ed4Tj^J3pf{irq=r4YfF8eEUm??* zgC>u&5jM*^784q-CQc7Q&ZU@l;htQZNMnaDUY}Jg|$`^9h7DC?#V7%REr#@ zAjFqq_b=5`S1t<}Eamm;P0!TQrr)D^e~IL_#tl{BAO-ij7NP*hp8wM7x9r(#-*Ni z{K57SK(D{7a;8HMQO^ zj7gqK)m;CqJf^@mB15cTQ@O#tn>e4DOO@KSWfdZkP{E zOn>CqpjC()`OzL{tI_u<2r?il&?X+*Pk1C$K&={<(H3+%G~RXC&olc7bP_ab>A>kM??L+SWoq5@gj;gOvM>4y&9d^4>1&V1=YJb=4Z92(Pw&*k&WE?- zJcvQw6%9cS`4EZv`wrOiWMRmc$gdk*aXVl?h^>0#8;r|&L;5BJlG=h5BZ+%S=)q`x zPAi`>eswh#P*NIKm0{N7TdwHD)aT5yq7)zUFnK=J%+)$dzedZla^kVtvrq5t{VXYT z{?qEZX_OJ{6}*86eMq28=tyWuuterYR=!5J(DYR(?X_4Ic1y}Q?IAQQL4$1i{!`yB z-`0Y&`{m&G>PzX2SzyMe?8RQYT(E5xC>uMaxm@UJyy_z%jnnujmHNM>l#SLQ|EfD{ zTNpZ5Qr4dTx>1LNg=J83M&GRW`(7$xGkcMM1vNdzHJrBDtCO>J!y$-6TGr)<9;%w&yZlq7*OUtHae;x=+ z2>ZrVji`JE_vkyaDK0bXdXojUoX=HF?Quvk*WRS2P&q#}PSq7U?<~S|D%!YH#xnK7 zRtG*+({+?PhIQb(FgM^N^$u<%9l zt;<*T)0N5adaY5+vW>QYpYpxmO?9hzBwAsPnm@eUi0^t@U}no;g5FN*h8Ed7kGH-; z`PJ}v*GZb%XdIKYqsmrFr6xsN^v7%ekTQs6d(bVd+YmNHA{Wkyt;15*W{NjvOEXrK z*H?~-VJ_!)U@?!*s$cbu5*#|$V))!VA22RHbj(mtAbzuQ^kZW1!N<4kAS~@}UI<%^ z?o9FC$h#Du{dQ_WyQxsFoTgfp#<#~X6xHXKO+s^%YEmQk!>>&7yj8EPxd@NUz>?UZ zI4kvLAvCd(OV`nCM4MNLZ} zE^~}oj{3~EATk~e#MhqVGclVi4?5S<(h*CW{blWOrQUwFis=&i`q-qhxB~yc&{-oa z;#1paZ4TW!#~Z9RVt+ij8c?Ix6+oP`oJNRqOqa01qEf>9?^Yik3coaQ4OZ(ln!A;e z@zTtX`tEI|gzfg~_AjH9rWXd~WKaWV?)G=kYXpNgmu-U#F~Xew%x0Ob@O! zl6eN$7WSA$Wq-|yNqaSwM`bUt#nX16LEMBpq(eI?T}Z?oE$xeI4e`ddCVPspc_vu8 zcW`^1*BSR14`P(|vQ*EQ*i3TFY+Ps9__=+9Cxr9Bu{k|2b>97y3l?(5Iyx?-gxQ`2 zi#aQEe)i)IuyaPlj2G7EOpTk`c?P?UE_IxLv!L3Xoo>;aGs5_IE{F_e-#cIr4XPNT>WPIUnWg{Vonq)h~ zOOeE$Zugt+EHh8hAZiN~*!RWsi4KL9m^B}zT<`ifXCx`k#4B`;FZ37bmJoSQRCV=c z=Jz0DwLTjl>MY7UQNtclM8O@ch|D%LQ&001`_tESq5U>5Dywdi zGz~=UN!7%j37B$~Ewd;JD}#k?CuEj0y|_8SexMb#=AL-G+)6ZR*DEa)9Pt_C{Ux=W zQ2AD$MN2EAeD5R0Z=HJ&6LOSiJZT2`VeS;7+Ko|ZotwnprVf*sr4#`GSNvLA;d zTm^ppIvo`iaW!BYryABSZ9(5_`7%z+C4)UlC@848^6qF1hZ}3!pzgt~Y-V@AGp1`h%Y%Wf^@dI{cG0Qr`p4_>J_JWyJAAMr2( zoa&|3--VLwoi2A(s%hcXb%r!(70&!OOC*Z0kSLZOovn;%bJP_WsLJ6DU~(bce zlF?2>!JuP`xG$o)Hd%gy&xW})5PmM;B{98?CX>gWq;pGmp+$wlp)o1=5V25O8i;gS zOGj2y5J)}QtLY9FD8*f(Sf>+1d`;_Au%9+}AmC-4eKQkdYNp|@I)E=U)NF{R%(}VD zw@tBq$ARFimgtGPW5LomuY_BS)1ACjb~fe5Wb!t{v_8&D?2P`W@D%4L^}Ao?a0iEz z=UQ4FvZz%#ZeH9EMn1ZLN-EO3voATXRQle*V)?_>~s9<-Hdrm ziqs_Auy{&L7aTGc26BFdP4OK%pAuS!)k~4$Q@w4OSHkZBz6k(P0Ff3?l1ou_UlnJJ z<`;N+OKVZ)%qRq2s#<^hrRX9->wy}PcMQG>DkJ-TYFDZA_|^^r7AASKAu#QhQ0W*^ z3e@)dnoiCxS-bFla`Q%V^D}TI<*Gr$$^W(ucP0>;gw;hJG7gvcT5#CE{my-cteH!^Wj{z|+<6BqK}@p1Q^S$x5}djgR#)L1~9??k7` zU-d~ z+)yK+Cs+j)5nXs{&fAW+^Y6J{Z)l|;&7-O|L{^HYmZSKSe(C81J|U=b;)RU}cfAW* z%fW$kH(&w;%>Ra8G`*1A3zrau+Sj;-`r{`(EQiZ+wpTl2Y8k#$rMU5bB zY0yLkT1?7J5pa@x1(dXUn@suDjqR<{v72{&r&vjUCy}{bIuJq<$I9>~g}GkyZmx{6 zu=wWvyLGxQY|VP`g~|q0$I7ZhGM;bYNCMYUa8T{qyd0m`yJ3wc(2vT-wWEa;7OICJ zH`Ni%Q#&=5(!JkwP@lqZsn|>JPwutcgTftn%rJ%1w#3t;Szgo<{4_1N0nCI}B~$RMA%!T7Kktyov+fTwK0pCzfrBpMG1=y)Qa@XffD* z0yB*@XkadpzqpO*=N4z3{tbDs13mrG%!L;lnazF}xU}itxJI$u8ARQi!f+8=$F}wM z-iOb5%z9KMvn@hIBg7>-vNkM9t+zx&1zOWOr*T}cArF4=zgZ!XkFgSdXB)TP4?;*09b}kV@$Wg9_N?2M@C)mz{g|ujYxaLLR{|2 zrciixs9S_4OSgxtbuj+m&W1NaR3!His*9aE)~K&Cp{L}rY*d!tu_r->VK_KSAuTq z^iFM1W6J?-o1r@Mkikn@9~`cmCDH?vunuVPakqmvep6^-jq8=GN}-8$x3S$Zdg+XA z^zsmE^w5=#*4BO8m|=J9)=AN5#uS~^BPb>+N+(BW3pJg0xiNt)uY;j>SZNlB=ef(s#u0o&C$#F4n4%Na_BFKEH(p|3 zV&Csi_e!04as` znGQeE$n(v^EK8ETCpKltxVxaKiTb~mPt*h@2x0xa=W*sn7mwRVM~p%uDT0 z>6z+PJe9XB!VbBv79|s=C%Wn*eFZO^kF$$A3%)~Ta36pW55%yE8lf@0RVVb#22%-| z#vJkKEdvueMKj@+o2SyKvMJiUV7DwoaM*qp0E>?F7(V;A!*63(HsXle?G61Lkz{`* zzM?fhgrWx0Ng%@Kmz+P(jkBjo=7S%zN|L1QW4mILDX=hUh3b;qQ3LlR4GdyZ3S3}U zOB*|h;332|`zTM$ngl!xutx@sxW@{3aUL%bYYsolzdSpBHV{sp*gLVrfFBKFgESy- zE1YF}I*k3&4og_I-f2(6d975Tf+|A?U=n^JD#?m{!ST`K(>SV{#-jS!7f$V8!pW-R zD!KP0-t08^S&+*TCp?`6PW9TpkCp11vXO zx*HG|>K0kC{4V>$&rDyKeyaL~8#Nya{Ty9U?RqO};sve&&IExVce_x#$<4^Q12k(q z$A=Z~0^BHN^85@_m&WL7ygI zkUe$3PrfvbRp7kOB6q{ps$Rr76HV9-Yw?ys1&ca4|Pg13aNqVW|ArOB6ll|+$tXEuDKs_-*f3rL^ZqzXG9oc^pD4EC;e zZg;^gu)RBi{45UZn?7uiegS$!CA=cA4wF<9%mL95UfFz%ee&$}XqHt%F00#P+u~_{ zsXIQxyCJ`~kWW--88wND5_OP0I<-x-a8PknPek5<{cAJzG)qRX|CRA3y)u?yQp3Ju zyFKO^+>z#W&Qyl;HjRWJu48ufXHn>Z{*{HaLjPj!W;q1nb20b;sP0++j34#9C z2NSIEa_@4$4!%{NbP<1blIM(W22GEp=5tohJh*aZM2Qn6y`d9d^j4p$GY#Avl? zEk8c^&$K#RgyL%p&{4bD9j$^lNGX|@_gB_|bJGBaT^vmR!v_|#E;ygsEIKuf6|3?h zj|fq5%G5!$EjletEJ43O1_o$^88Cc+i@8 zZ^VRobEE~6LI+~KJJj=>??#F$pLAQa z)bnJo5|(-gH6PIVr!YK8+>%7+W*mQs^6~I>DWMA)dWzgHwfP1Qn7|i>REgKlft7|d zb&13ZaBAd*Hz|5uAjvZ#$bKsY7*VPPsceJwP?qPtCOr9GK&_p0e(TYG#P z7Ur|t196$go>xTLs|JWV)Wh-0)psGF&mNWhzdn1#b&5dsVJ z35N!ubS)^M*+>FAGJaxSOigfnpbcGwfXv0>S~r?u6L46VR-$x$Y)sYJ1GKsG2;5Ri z!ADpyTeYv;veh7@V*|M;V!{A1sn?g&+|(asB^YlayLR$0ia#@2p_8&U^X_R9uP-@h zO};=HJ$-2o-0use$d!)g3`)v#Qf{su^PO~`22PTm=$&+FDyLPSoMsB@B#fwbiTbis zg(ux*W%bCp>n5PaXtIMm0qOa*r!-Fx6KZyGwx~`_R`UJ4e{Hl6R$B_N8ByJq9f7n;n?^-AoYGG@ixK_$ zP^ZGe7FpYQpSN^%Dvj#gE9m_rO6oE4#v`yp^*UjSoX*jUGcDS52~EH@!1?SnCo1z` zMT3U%J=11nFK>swO;3$91Q-83X;+r*MSvVj(ojMmH`D#?1!-k$y{TOI^Ti!wC0X-6 zuHhzndPHNks+WV+uI2s1!*2NA!bi`ORN@6>a-TT`z-(wdh%+y*_`1HgBc+pg>aBSp zcU^bqwa4PS(KS<*jQU5UkB#f-TBr;w?jzq52AeS9g50bgrBs48BRoR!vv3RaTXXJ~ zcKnN1dE6bS*u5!JqIknk_H>w_1=$f7Hp42#?8mcPCuq;nE3m~0%?;*3yq?iy?bnPCpre~XPbhvw%cv~V= zW@?uhBbkmPJ)dz)doW?`wh=Uy5sHwqe$NG7&HL+=W6-Sh!QDfa6sOYYy7%j+!b2M{ zbtjr1$FYE2z<;m~fYv&RxGZcj!nbyhFWrYRk0EK9y~hKuRm8PzxnC7Zp$7P&9YO$n zy!v%H^74J7habCV97}EvC#eN243?HP(7Df%MW+Q?Hv=H0LBI}kgoN9uq)K!m0tH8P zew%LG+!ChQXjfh&Z+$E0E@?61wu@%Mv9iVc<_c_71qyEQ_X5;Z$-FWm`XbSgH%PPo zL@;A;M8)1v6S_bkd4Ngvq^h8k)pgDb`KgYD?Xf^Q*hngTi2Q~4_z3B4`qoK<|6Y!R zw{Q^VCb|E&0R99tLM<_RI2kck{g5D>tKy`hv%EuG@M2N?^5xA#yAJomV|yl}MzqCq z;B1NhJzHxg7-{=oxYp83feTlbM0yjKFZ4#`5JtcW)8_8Kj8>j=lPZ(8u2Kv=$mGr5 zb+vUIzh3kMiF6A1Iqz$^U;$HPNqB7On&Oyg8#Ob*INn56gUy9QgNSf`7tdD(e9xf+ z){fZLd0leurl~7OFr!PXnhpmx)yaj!CA2mv>1t-H!RS!S>kzj~Lh}eFiKge`VSQou zv0#cmz-LrySS^}~c`*i6<>Zm$-^Eo&Jzao}!0c;&Dp*mPSJt@_n_T}9Y=S>FC4Wwn z$|W#%hef>k{bmO%JLGOGw3?pg`T~+ubtytIDqY+U$yHmLux2KxHhmzl7350$e4xq6 z!LMU}>tBG0gI~xGE9WtSKvbQg4?Vs|2j?!%)pz7b>49zs!c=bTU@I9M3qD&)gZknsn*r{!%H0&6X4~Y@mAUS%!L04*!C3!w6j= zHf0SET~TYI(f?~0M%!>#2O072sz)mm8fsy7#B{RlC%`(Nquw7n`_EI~+Tp>2t+nl6 zkIjANNA|XS#4hrSvK<4Nw9-&N$F znk5H}Awdl3vmS1WxSh679oQde6u;F<_X6<~C>)pAeAO?o?~qzSfH3;-<=T!Bnj6Wj|q4Rtb%-$8P4?VdL6v36ivA z{$&XCVzhY$pM8o_)cwq|$G_AEOCYZPMqL4ifeYF-!JOgMBJ-ilO^2agbEO;AUi zupX9Fpm`DKJ$H{}9#8|INz!xMb~wRXna7 z^*xmu&w@JKJ5|TYrZ>4hJeQw$OJg_5oUlG{kDvCX7b|*FP|qQA|C`0+m^@9@P1xnj zBJ%ZooroP(MjYE)b*V{1;p@86w+rL`|u-Q`ER$r=I7rf~5MGNg;!_~?Wx}K-} z>I0a+Tyitk?FCQKhCGH->c*XXXLLFdn$(QEe1Pv>^JR8%P+h2`->v(xqLJR<*##XK zU9d?)P{WH@Ow0@)+kRU(UOcnKFv?oIy~Rqb{pFODJGH2eUpmMnl=i%%Z`pRNx-OY> zTc+o0G5`isySX{5nqvtQmP(?R=bOEm8MAwOcnsLWEHJuAQ$7qsHXf{J4ZzhNz0g1Za6$r zuZ>UvJYddWM0UxU&I?`3@NH*a2>K-GDEx?4d|-s0UW_#+>1I;Ksb~O$yPsyBL3*8Ie zU!KQ`_{#Mz`EtVBSdrpp0O_ha9OQ_Dp|| z=`tE1=n?_&hh|}tP9`F8Q3c*0;H23~#99&u4)5W5&+?x(ope|Eey+gWP_pp+YzNz^ zj4SPnnkvSHJyDMszOPxqEcF--no&itBh{N3&YWA48!-{ee0x_d1b^F{(drKp2KS=x z5BDa)A}%WLxt9BHNRMk<8d#x7>Dvto;oCN#y?mQOc;`|Nppa>n*gTvNdi%Jd^;i1O zMVaMYlX~0o;ZgCjEc=>!`Ke;ws~K)D9>9}W;$LP$KGq>ocMm<7%YOm8?gV)`C|>jy z_rT38yU!$JwuCGA(*y&K;MdKsM@#KckC=_!o4Ld2UCyavH13($pj!NeT?PZVAZl1RC~e5ky@3tTk*L2<~qVzJx;FU)Sx=$+h6J$rxE;`5zH4Ox=J;N_6u zCsUIu=;di6AjOIMm{|P$p(n-WAMA1g!g~g6mr+ehTD&p_;(7yxTa8z_otxGDxc+Xs z&O#*WdG1k}PYpwFof#;z{R1KW&4pY7EF%oVq)s{O)(8)T(9j)%uUptRJL66e<}Z@F z(EN%`tZ!A~Qr{d69sd=91brERw!v_#BC zqG?IE@`K9_q0JEmXAaFohDo;F;`4jWaTB^hOz^|48fgr{$VfH_+@dMMJ%_{XJ-F-aDb#zP z&9B>miub0n6WSqZ&M)oD#|)#&>8-Uni1)0|JJ@9*50=RbfF->t96zyslyTE1g;|Yi zK^orL62_O6A*741VeMA6Lj%aDXXI__u~yZG{^j}%nJzJoRiQ*W59>FVGUD3)`ODVW zE0oyEW(+qDNLtYk)1xucHuZ@D6CmtGdf^{sPjx@iEkFM7>vEsJXG;XCFPx&$ zhe9B2T(}X{tZyhlCHsiO_h3tAiLLk8raW|#CHatkf1vv4%s z&XA_D%`QUvciJ7qJ~)&PKbZ6@?7Zyf6n-eVN@J)+)|O~7%<$Dg6&VH0M;YiN z2;~C)v_?Xv(>mk0WB5Jmjg?qKT=XVZxDn_{S~~@;TZx}$GJ2$rLSVn=MVELs#8S&) za4;V99Ol)#7pj-;PD~H+pjWs3GSotof_*@&5xa2fdX9w*Tj>XIG#pj25p`lK7km$t z-Wm4sxj2SE)Cg6NqicEt{K-3))aX581M$rV8~ij2zlh9vkGioM)17Cz7~!JO1fV$3 zBgP;210WE5_}PnKcCBvhO_%{Z>)RmnBR-OEeiWhkAuCt&iFUC@k&(^c!BD+ ze%=cZad}z|%y}CMb=4%=5ZE{|T>u?@xnmdH!RaeiW60q?H>9Jx%(0+_R&>3F^_oQV zwKTbhvV%ospxI93`P*z0NlN%9LBdsGNtBoC6t#u~ZrP|u+SYpZCnr@usX=30@Bvfv z_rY74rhfLHJU!%QP&8C9H1l){ePi}_%U#=0egx^Qyqa};q6Bo?cSL!8lXVPFPhKvW zM5Q-Dp7w+;&UOF#%O;4J|Lx_u2{~DaH#Fq!sY}rb8t7xD6MT3)gAkxsedy`HU zSI)7ZlDC$)(mV+Zv*mY*Qj4u?ob(C}`6Gxm5$$ROW(d6-cfNkRaj&}kGck03o|-{$ zXT4&nC8CJCB($c`yzWw_Z_n;P{%5t8?6vtO`EquPjtiiUf02&2ge(5i{7~X6pb{QU z=U3Sl-SdHIpCG8?%|laH`z(3xbHDwQAv(>Y=*T3c(7{7?eLeeQ|D~C%UL3LN{HP!} zJi^7&3*zLhC)()3PjPMjza6o^!sZ#v>Nf=rXGZoV#W6x*pPggcS2EPQJluYlUu1*i z8zV?>F4eDvjXdHO);J%JGpWlnF2pj_zdjs@$^=2?b^2Srl-IUr^R6GPj-ll>@mR0i zOXdfhN+*0o;3^|aX$ZmT)}Ie)pBIr*dm9&)=>kr$As?TNcm$Pr6Iy-+TLysXW% zRTgy6x8`%?#g1cm7@&(^1qg3(w5FeCTX$h%x)Z~2{vNhdSqeCilZA;bz{A?Gav% zl%s#&U0hh*kw7SXRL!VIh!bjLt(ye26T4@-bT3=ntnGlH>QWC2Lw6xo>fn9#MYzwq z8N6@^;)zPYb@xXRvcSzs+ofEG!RC+X)5GJIrVax690Z7R_x3h_Z*}$U5ft@%XfXt- zO;<#ZRN|$Q+X^*P2OE#G_L(<_7F(70MO5{dLfKsOs%Of&?2N7FU|u(15~my`m*h7X zW7EQvK|_mh<=Bo_jgKwC|zk;42V8`!ssU4}YmK@+0ZJYS0#3{X@ z^CHHM%Fl%LI-uvCfU(nlXpS(T+4oLt(f6)>5clOsk^3ugj622}Ppn$R+6*eX<^W92 zvhfG^yoRXg$39P;(=tRkueIk~WqXv+^&i=F{(DPNUZp=={hWQS*gtSf*w9MMW3Cq7 zNRu0}7WxL1SUDxgr%X)a7r66yo5w9Fq38(P!SChHH793|7!wq+(Eu{p3Soe#b=U$g zqb*gH-Nk?($`k*@nFoF~6cS|C>_Ybc*(a&<;Wo2zxL|{*{@KC81_yAIQsu*hY=I0M z=;L1Lnkl-;mMmGLS0&SAhOp2og_v{EZKupYDaY?49Y4DJCiw;{%3L)uGbpxTavvHI z#U50C^*CffBRP73-7IP;`IdrO*VgVm34zJ)S#w(FYMqLrhK5#b^Xg& zh;EjLCz*m`O%8KZ)&}xHtM&B+W)r!nr)O~Yg?24H#(sL+PWE72yzG#|ixCMti^=`v zTbS+>eAyzaR->(X3>%G?hvrJ!L6B!gp;5_p@k((|35)ynPT#!FoRr>0c8s8SAXk!_ELwD7T!0a6UtA>zPz>Ymy~yJxB;SUSIs*vJ22;Z= zuSXqm2Co7SeT~t~)I)JY+dt>##=TdT<`aay4Ko?*nuo^4`7O%Lsvtonrro7&6MCro z{zB*D7pDa+sAIIBaXNs+Fc{%nvW@Y@TVW1qEchx;EGJ?^g*Vg*(Mqg)quG23Q? z`-cd-Bm_Z%w9RtBt2uS9l3`z6+*tIwN0e9hjQ4Lx)#_d!Jt$~@)O#8I`bMBKedK<+ z%5OHZLRybc;7=dOgW6WK_n03Y{Dvk*`kcx7!^4=yD@vT}iG0 z5PZZ@a$vNH&V#r~I$$g6K6bwmicYpex}(6~GCR~iFNwpcmwvMW7^*AG5nEW zX81`o8=M8R`zf^fGzm&1(0AHRm^Moc0h>@Ui>jLDm8a(lZeKs+H~7GOiZWL&g>=O| zKzULZ6 z>*Q=s>>i4`nvny#g`l4ILFm%+{p-xrL&veYrYsBfT6uDA0a|+Hgwl5x0hfd#Ir3r+ zl!Kq;;FUb7Z}`#`pZlU#f`YGjWYl2qkPL!(KJ6$!?9zAPcxYN85E*hCZj1n}F(qaWW5b*Col_5$z#CJadaj0&SLBY7t z1FPbdLHLkqUJ^@XM(#S2!^Ppj8|M)CIwgLjX>eJjCr39QHDc8wFpAkqwr(02 zUn_{X25&GQEnTyS;i&Dydfnyc(3HI?a1AUF|N5|Lz&Eq2zP2UJIxDBH-r-D@RJpWq zG5<}{Ee_nRHF@8}s)ULZR?k&)2LGdK)_i@?gQbHvrs}7-IZ~YT{tq_g=yxfHCA8ls z!^-Z5Z{qY9H?e+-_i?>d+Gt*U+&|eW3H8n$RxxIn3U6=8fsp~2U7u+0p3331ZFAWi`?5&84uHQ^VS+VAEEgT%9e||xJS`ZJdLCBP?uAwhSF98I;~)u?Dct## z++2XEXs{#-pi8&sq3*&E_*dqyUU3;`F}48UxZV%MZXsSN>;TtuDPnte7szQb!G%vS znW8Hi6xhqa=VN?%mW*sRja3)$hkpc^|7nBU%JFO&3^GT#V0;VL8oI(x*&!vag*_d~ zt*7P3wS_^vBJ_47KH+`*kiZs)uWb-gOCO!a+E{q?^+hi#U)L#uS7kKnxTCP;3=4`< zd%Z!{ne-YkOwuP8J497NgXAcLroPGueZ-s;C9fmZ^&--%1rXh5KTL7v-)?fu`$7c* z?@hwt(`iTH0`WJr^f7s1Mg7U}D`XEldbN6%$ZnaSlWNdeLvUFq&-|5;r0kzGC;%e6 z%rvZ0GH}0rkhL?G%+Zip`1b`%P-QD-&xd@XD@H&_7h&!2MN$!r8C^nMH9}Jc4~OOx zBFQ@I2!e2)b41W^sLZF9Uw>ZkEE~9%&DI1U=jF~bb+GU6k@dvfetk=_5G0lLz-K0e z`Ua-Zt*1m^`hpL)ZhEB9`;BDX1iwi+<69XfQg&r!03mIo|1V4ImPATB zcG6qhLWpHY7LSHTD3a>pla3kojFf`k#O|3-6~NII;bO~*Du?Y-=#(%k_(PRMy`dJ& za?ZZA#i|RMD^bFFhq4kVT!R2sI7YPGuF~EMsR3EvoI2A37gAwRo(; z5m2S%EA^leb3PIs%obin#r56!_e}>dOJDdO+WU`|JvpJ$r`S*|@qX>m;3R30?4>kW z1nb2G%@N=a*F(RQE}laEu#QRYlQ18>haIIn>Y6v=&La{HkE?_+jOtJ*9)xJIsq({L}U^3n4zY1u+*+w3LoTvPH>x36b80k`5Ruyt%rh+F?4 z55~MQe3vTCoJMU`J_(+eMeXpxM%oXSjX5?ha&_zK!H#XHA9xUZ?0>arqzzY9oU}hW zN?Mcv2v|UZ(g%(C2?X`|{>&cY25`(3RsA{mqJuE}AJ!6-(ZPhfYOHWtnuI~NUr?zZ z-_SDm6x2qWOLuH{DT2Yb zDZHMp9+Us%zHB?HBJX)+h|TMwVDQ?ye*M-S%by@(tn(pXh9lsSAQ|WMD!0ey)-MTx zafLujaI`rXx8KP8D=ZY9$e*udjc3@=ALVrCgu9~qtwWExSc9mNvI{9erNidn&R~9m z`LNRdI<{n&(meH%5F(UM{%13?;Y{d0vp!@HA;q_uJ0iAQo_-d=BS;8h5{wMwafz~b4B;-9Me3cxb<+-5OCv)Vx7amjG<82Y%)sM#X zCLi0ARl9^~6|q!)TE(jTMqu0O)rziN@UZer|G%e39(Q3>jjdbS6{=MGhW6 ztd46GL4tqzu}^0ezPO%|J7XW7*@0?5*ieHVc^H|AMAcG8YIfH~1Z{@K)=n-sF1+?nava8-_bO)w;<~Y^kCoQ$B0(!c+c> zCEC5Ue1S~xw(M5u4eLf|VX|Fg)ianK5Tm!f8)$ibLkT-!$3-r1j)3%mDI2qkgm^_l zi4CM4zFSM7m!xB}k#^5vT{zOqyvgb7=8-tAKEZcl)u0^!rI3SW2H9QRTT2X zed4XGNUtX?9M68qgW+=h(Rb0St^6{Qv zCcR2r&(k9AGnEWdHlHFY(mw^^hkGlPCVuVtYDwbbg82j+59F5wpb?O>{Z3e~$MUyy zs61MC1YIOPAI&&g&(LWXUKK!Fw%pu&CdU==ha*<8%{51WKW+g@g#G3;iz}f#AB76U zPkWvuZ7?XEtr)456>UZ(j0-)2VRX&NE@xt~t2*H9R{vK=+P|FSmR7MriuU2c8Wcxa zUFCMGMzToI3h?tW8VkC3!%0n7GqWgotes_ZD3F||*s{#l5UiP7r56_$*rSiRn5sr) zvflvdWde3uCgbAgQQ2(WvR8}GS>thaUcmPW?Oh4tP(#7z`Z~Xy{?e%bww~Y3Gq-8) z>y^WKzih7=8qaUXThh9!>)I;WZvaFj$SQRQ-?H@i;hUH`jwL?)NXNkf2E0d`@258Z zcO~U%0M}{=aBbXGSpveAB~9p4HH=~th>dGzOpp`NJ%tJ6tu~%`-~sEs^YQm$xqi~!UcTkC1p`)NtF0G3wooedHR;?nh3 zN9Ay!BI)&<>(jv1{a{X}d&GBl zpd|u{IA%|>9%*-K(1dyXV zKvaCszI)}Xk|c2>rsrK+*hMr1w7f@F)Ww-ZsS<_9pZz)kT&Ml{iU+%kn$+?Bizi!q zPwHP@2wHFvsXkvb!xyR~ZIjYk^(Ed==$r9rQD z3}_5nvq=L8G_6uOJnw3?$*u$-8q2gfEa1&L+K8x`k0Uyl-1uEi^*7LYTKX#0SL`Fl zd>O_>kerYzjaWs3Mr`zm)p}aa(bDNkpw&N@1)3&og)nY^~J*t{| z{Yi^{1dugw1mH#EaqH=@HrFSlcR))2=Bxxw7Sx4T{}MQDD$aJ0Pc99r@jZ`Fbc;t9 zZO>Gv^{5r=za3c-S`p%%H;*+Fv5^I8Zv3SWpQ5G1Wb6=GF$5D77HF0|n7>y@805#i zs2rZIbn6l`DL5vS>wHx;T(Plkw(L}{b4byKt2rOqx5;@Y0eD!_$&25v_-6f@r3`;* z@Z@NbA*x=R6v{t`D7bgN%S&eD!RUQp*vMb)lS1Dvy(;wJV#e)J(T`dH)U%{nES`+i zu+nJUSZ3~p{&A@OzZ;O4AfumW=*|H7YS{=SgV;Xggynt7p2Pc6|E&p-&u)qx2}O;@~S%X-gyHF~aPEA^mD8 zjnC~+fiFRaV=U#Y)b^EJ{T<YH;M#u?z|RE@VY8XP+$ZsR;-+na(T{`G%jBk~ zacv^yI%yISo==~MahOiFt?XI-=sd#Q;ZpZL`s6QwTOs2|1z=wKC^$Sl(^yfp^Aj$Ug%)-^d8iEPA@?@L~_VUR>v7-I^O%bkVzTKPaXR}GD>M~2zXAQ493uC^y zL4rb$F;kGP+_U;pEPiY+=ekP2V87xnSx7#9pKA2>VbdT`@Ti1jE!JzY!&xN?fr92s z+Uw}NuSbNJ7`wSQlnt4g?_;S07u;Ebtmau;RB3#Jf^l#XdQtG;W2NFS=53cb4sExR`n?>aDZp%?Y*Pa}pYi=$adszjQR6p(k%0cTMyN(MMexOn13L%BVCg}Gybs-88tkkkEc?#y4>aLhch zp>B?#w*7R^=)_JqFgKRimBe@ z*)#oxo%HIf9Qj2c_4{~2rrF7bgA1_LA4gqN z*XGbcJV9PJQ3>nM%t^%4u?B5L=-N0%9U0rk)B85|7N2mWeSzlHDp@-!yvvS2_%|A_ z{RdJ__6U%-emaD1AKz$NHFVXUJzxC(%qK-)J37zgaV%gs6K-A?6oOtJZ+t(H|K8k3 zGr~Z*eY|+LL0FR^o6jMv5$p4&F zk`e_T;7bK_5_mqaB2J{qLs3dfGdy}ytfy@mJ!3mDDodZXHwAiq{GeBV)nQtKI=OB# z&P$K&x}i?R?cCIJQYFY0_EQ<-b7eBH-zDZTK(RH}7Aqe3k#KuddNgEIgVv!UYtvPI znd~*otwu`Idi;>4x-GF$ke!VvdD4d?wsnP-nc8I}CbK{uv%z%-SII6X&A3s&|CqP` z7Qh?<7M89!l}`n4$#ma~G$?Zog5=-1$K!jeyf>A(II7Fq(n@^FJ2$@WeDBzvD%T3x zZ%r1vke`t0hPOoFpQ($-2vJ3XSkj@5{$VR~b4!@jNX^E;7dvXXTV?;O@7XlfG$#}8 zbH9aOeOO9RkE3U^4aW~}RMKmtU52@fM%9aBeV=w8x!+F>d9m1zTl(rFbp#BCu&z!} z9Fbagy?*Ws`*=pP>NU=5sXwA#eGvfdSJJ)Mi+<2;YFGUfrA&69yxpFMbA*K#bNwU5 zRO-n_+1}I~d4z{VCMc6{9Mx*dnj2|4AZ~NJwAELb?4JHEs|t;)P1=_ZeNu=*46>j1 zRr)h};s3$T09s%LL!_*vvWd_Vt5#^raHD|8O&i(Uv2vbVWC&SQlz~@?$uI+1it^Fa z@~a3KCpYdSTw`;r@YKn2_%xvU;6P8>L-c&{Ovz*=(9FgN6WES+As|I0tUK|HZ_I=@ zO+bpZnANS_nvjs>M*y`Za8B7m_8$2?)!_K(YB&k}1^^WNHRI{$6M4=M3{e^1EbLsK ze|7PRlag4)oeTB%5LH9BY1Nz5hQp(KL8F#Cn=!91Z1{a^C#MHvY$i&z7^bnkhAF0# z*ohfoSMOPc$hsFmKI?c57n0PCvjS~hmbPZxpP&yuEa^*_6`$gOsVnXR5DuYyKFLkc zq4f$W4Zr9I>Wjl2Sh*z#xx(ym&hoKHsf=vWDZ*WMqoT(1UR{$PDN;~ zw+X*swmA{QL<&m|_adt}rkFmnOP*(tI_VeDXl+zxW4sQ!K*fDG;E(i=M4#jZ*BE^G z4OFqT%2l#X-#MrO5C&WL^TKI?91yXn>8cBn8ZY$qHgvhQCxuR$p@>vMHFxCPL3Zf6 zxVoQvyi^z2O{L~R8tn_Q@au0ZDYlL%I52$uV1hiN^q2um)0o$l-I~kUo|n*9aU&3y zzx;T=>B=g#Sx6NKgcxlQZMGD|UhBrghC16hXb2_8jam(yci5 zob%3C{kiu|?zOG3ptbe}>m!FpxBSRn>!%H|ga=~SiPm$z#oGc5D0_upz)&Utl{gjU zKAU&rR@6A&)CkPNV*Za|Z$q~MrL>RKIX|u~sGycN9i+7`DtgMQNg#MlxwcKkt5fG# zO5{0T1^B`qm>Q7pwMRIdbrMQ{CF;pRNfPTQ)-7FrKj9dk+bErQMPt13VSGX5tE@RQ z7?%ZVl`^ThSgD>_3!9@U(u8b>NASNZ1ByEg#<&Bfg>GH{AIaIfwewYqus6yLAd)wf ziWswu=n-2d5>6<3tbS2q2?EAD@siUW7^PYI=2XDs9uEgj2y5o-oXBH!05jlxqQ@S> zN)Uv+E=2ft$^Ui7-3fF5>yAZtU0P9T*y*ZBn4O7pQV>vN3ODPpo_D=r%3rY=mzb>* z^O2of!8~JoLEewf@W&Im&a{62r$JN|~h)qZ{ z07&yKeI8-krZkg(MCAtj%z=K_eqlF{Vtq3s%L|4!{0YROmlCA?m2drYmYS@)ZxM=q z>{VQ)U~CHnZUy2Of`fcs9L`l{d-(YdFWh;5l@tC>%~N1z-{$-%(p7I36d|!W(H9hM z>BCO?9T)sDxIn%6n1+*<@~&@LQpdNGt49r8Q)~WhtN%lDzstTFfnq(RAPo+*Xxd3P zf3~2)O~Yctg#f7|XGAAXlbVhhvIMZ@3kew4?@x0+U<=*OQ&vISJiY$9+tqKzyLPjQ zQ~u5)n7?#Xb|H?sLl46un^1M9Ol-#<#~nvOy&+E`h3QwoOtS}Wi1Lu>uydG~AMU+;RlM?R3chE3xT0$02c?xywG51nw_q#- z3aX~}pX2WR216@&Hez0SYWe*>t~x3_dKg~OvVVC)IkD{>`G}hxiDHnwIpuLz!b_8qpeYAcZ6M;?G1Br}uo3uc_x>+wIzR>%uSu0IY4Jg@*({6rqgL<@G7b zUgby#ait^xf-KZzp;~YZKihqbb^IO5x_90eqjdvOWy87UMNLt?$lh<`i2-Sgk4$?gN|FyQ`sKVa(D>8cI(b2zmKZ;5*zbp%BJ?;RxCxkw-MUL zD=83tfjr)C2%x)f-_;t7$hA!uVQ)m2;hz_Sq(y_iJ-BR93(1uEc|nhhhfP@ZDyP18 zEf|2Pu|sKl#?0zgO5KTcOTgWNGdJADbvGY(HT@V7Js2oBQUL7nuXdH|*AL+Gp9eJH zOoBdFm@F7Nk5F-@k*lyLZ>JXf^o@<|&i~Pug8>Hu*WMc55Yo2~xLN+gA+P6L*J)$g zYK14=q<0N}Ko;D6;6V|*Pr1$Ez;x}c$vMQ1@1)Q}PPw~9mo7h;n7dfHRd%??Z&b;P zbo$W(q&WOHMW&BHPw%>nj@Y2w`8TLrCzrs;(a%L8LxL%FKaSzUjN=Piv|k)y!u8P? z;P!t#`v?q78vnH^jMizkH_TzKuSrBMOS<|7;+#gZVynir9x*=_h&9kefA#!r-|ePb zY2aq5HJAO+$dQlGxe zUpJPqBs5nSm3za5Z)T}{O|}jSPs0eGGqwemk4!h-*t1<;1DP^lPMF(8@hM*-xbCi?2~35Ul_5-Tt`$zi?Z-udlVBCTn1D>geJNlc{X(Z?2uinM!Ndu z@9)m9NWjS+LC?ncbj@3>AS$C}s7)Ufs8s*oP!Q2(pu2oo9laj{=7CIPF$H=83lP8!8O)dW@DYbSohxc*T}q7e24{w(oVw4o_?~N-E)JKV1?2cmu3qMMVk@ z5|GGEp2THr|*`%S{li#oRL-_MeoOTxBW1EZu+UFVt-1=odXhUL2R1q z1O57s5yHe`*|{FRFCp&V#@sp1dEDUcH`Aqw=904tY90`M%UgXRrJb_N{jV-s?Cx+X zzz5O$=N?Krc;kHjU%~$iApECk9fT&`#Mhvss&CkivW5cw?1=@S&ptGGO zVW;RvY#LQEQ`;oSL^@gmtihG9_h%uNu*+^cc1J@Sct>D@F_8e+|Mvrg@zTYyDKhOa z$~Wown5w)62+V9yn`Svd!nPJsyItr-Bc;3E{EE28bm9DPz#Pwk_2FztmX=C05I`z- zEkp|sZs}X-ww+c_&WCxylm0)dt}-mjZfi@62vUNy3?V3?Ff`xa-Q6YiZG6x1{mxt%e|YBEd#}CnUiUHqU2hwLOZgHxjdpDl z26b<22J{V&zr8K{QS&Jh>n!k!7Q8l7BkF2jD6{K$~TjOhsIey?e_} za=l<&hRg`k^K;{^)vz-(0y){5DT&B&72b_Bv zh;^P3rq~f709lGddc<|WF!PcaC!*g|G z!T7MET&ah#<_!$MSj^f<>wjGk?p%DBCxkK5g33MkA_2iuszz|9d|ZdaHGG<@#47S( zHGGiMc+(fsDfaTW(2x7pbsehe&X2SnEHq5fX<|@A_Q;l^xtEjrWbaA;*tJ z-AXG0q@Jp%LydwygN9Yxq+h9nZQ7Q0O%tf;8Z816B9_(iT$B)>SFPQ_C@tMJvBtw~ zvVwr%?u7!=bs+$WfzT*9n5;S2g$s+)X`P9Qhe2XRITdXiETe>enXi$R1z8XG*uTV< zRkVi~>KpCZ7HKbXE6fyx?DOtIVN6s5SKdSCk}kAj4XJS%qY?*0+;Xy= zb%-~0h>-C4b($MVOB?Hwg4{Iw$I3jC&}b>c@TG=7) zEmvg1ZwlzZ4j-5K1d z-TsLz8~~V{N4eJL53^)2>)kmb?q`8(WF;fE{JBoQr&YGw?+NOpkFNDDxvhCjG3p?C zY>}Z~J|sjlPa~-m#O~_sbrnQ$IhTy+gJ9#=`R_^Uh%~yql~x&arklk z0tlMgPRCMSayGs3tGT3#XZU$Rn$9S{&?;aVq%6Rp7cNW zt%B=ttd`GTmNPYvk~(;DH2U)7U}-G>LrSj8ROwikR>j6G=Lb_x45h+=wTM)YfDh2I zixkW(((j9ssW|e6H&;b|+)Q3gW^<;wT@Uy^8VcFm$S&*=XaF4Tph?)^*>29~zw5mw zEF1OeixTxM0C9U)U&7C(6bs>5^KTjRGqZ|)m~pkUu)4A{#OCGA5FRwwy!G*fFZ^5K5is~U6mh(lI%-i!aF$(5 zz*FMPNRqZ&+ROxaxda*6Ol99bMT`E==S!ec0Gu4thr2r#uWJLT549XENlp_p(qa=LP>s=5`%0=PjQ!^cCqf| zhTsDIxqAnOvsR$^Jf3~#{L9dAca+gBrxK3*HL!7@VkW6W(^+Q$O8Z&FbI>XgW@J2j z$%q||rbrpGtZ}=E#s$5Ct*mH2!3y*zk&BItVVhzy3xh{{`~60J7Ch8xA5j)nOV!+KxbZ^C_LKBy z)egt#>^CVIHU7a<(;*YD7lWVa9XgCRjEAxbx-0Gi6df~FAKg8dM!lLd7jL*n#NFV-TzqV~Eg5 zIJ6^&b@3*rAET6iaQEiv`;8HLP%OSebG2p(jA39c17u9IDt_PZ`Gba-YEr%^Mkhv! zW(@9vzdeeiQ_cCF6=m_y7Yh|OsH6QlR|KurcT~kIw)0nFQgdBjl94rH3!_6r!!4NO zReJl4HJm-Rr(p%;y3;4czt@i~o*_3~i+iRkB1Fo)PNU#%uHBu^%WI{tyOfAcYMypV zc}^@IIuG63RawP)>b)5w#@sy>m-Eo>_$ZJwGBo4Cd@SL4qhV;`QkQAhBZ}Wl04#U! zFSNSJ#|E_FuZo$;UWsgv}hbqi z1C1-#Dq#{`K*##*&L~%}Gj4f(>JOPso{du?mLi#o{16(km%J_qsi*ENVm>Z3Vo~hm&pE2Eil;2-(eZ zUgXW!7zEJAG*kF$6fx3Lsc4}!`UaGQ!oDmNOLlEbcDX34NItQIDRa}Tr9vA&Pw0RN zNKSsV48*=nWx)hcd*ffIiXn)5@k<+H;8Wh5ZC{<51$vFbiJC%=j8;cRj|+{p7Z!Dy zA^VhizYBDGJ7vhK=XSGZ^;qh(@Py~$@R6B5*6&%z>^PimGPzII9V{QEPEA}L+*niS zT1fv^rt+vPD+V;j=O3e;bRqxQM2b(EalR1&TTV=^X;Fd0tJ(e74?t`vA=0MKet}xpb|m;b$B( zL3|!R)hWxmE+0}IAe0GLzRQzl8I@|}b5>zqB2<7Fc3p)V*Kd~P0X1w|OKDwo9Z36s z$v#6vPso9x!$KU1Nm_yl%ei?N-6=`h_6X+ad2fm5vQIf$Sy@@Yt zpWn~X_$H;kX+h-%=*xEsPmXi-`d;aHRYmIbfXAPg^Vb_Lep6DFdh*Z1Bovs>Lhw_S z&kw63-`K4>jB%_Ulw&8xJb5@)Nv-)m-`fOui>AMYix`&M^>u`iRITrT68AHlGblOJxFPY?~4z!4s%W{8nzTbRW>1yIGiWv$IPomy@Qbq z0Bip+7k5AabU!cAsf--Yj%|=*Pp?kjCq+?9)JQcP=GG4soUhYgX=t^yH1V6sGfDex zOx(cq>uf$1ho;+*0xaZh)0*sm$`G>qgY+~8WpJV9V7n^}Guw>9>dRb>iv!(U?giJ5 z@AST0H{ewRF^3Sf6@hZo^C$u=pnk^1^g0uj&GXCLtSGcuSwCNIyW3WOet2t?EBvve z?8Pt#J#csKIWZOj?!vu{Bp=sxdbnm17u*U8!(2{aFP*Bzv9Tr*k%{5)AmyZI38{F|M1ZRTt2dNLfCDL*_6MZrM}KF z1oZLj3~3L@)Z&*ek|)k`p6s>xu9iLa)4s~r<@_SMrEI7UHUW@GjTT*VkVdY44$uX_ z=U6{sIJ-3W?wBHt3{Y-cf0sq-L86#+;WRe7qwW0pMPt^0?~2k;zw+1bH3G{6Xr0P) zpKqPlO&<^Z6wU(^ZOq?n**=come0IRekuoM)*VQt3P;>uMYnT3#ho^ zgj~;A%8Dcylg^eWu=(JDL(-B`OFyf6I2yHj%p9>wv|y|8L0aDMZSa^y;mj|+uIAz) zk0L@$r+RauPU4xD_qn^4JlrJ;8XgJ>aUqvbNNjk5xh+f4o}05XceJ8cajzNU7Pw{~ z;+0PDJ{B&gViF1oJ=rOJ<7o1zfNh9DZ2JC&a!q`}!%k5`T=QL9_2ewu15ZO{t;njL zRd&ozP|MH*nPAiZvR(jy0_yJgx^LSM$x+t@OzZ5o;;P))j|t8b&870({U--7GZwLu za1I&nW|~+A>U0$pV8woWj!j8j%d5Exck~)Ur?$8U_X9YQGle3h8ec~LZEiK{!oo2l zU)PjTv<*~(iEli4q5osHEjAH#Yq~WYu8{k_kYcc6=l+#?Vs1Aw*z!TtuG*WCDYI8l ze@|Om@9eJQ?J~xF$yd}Lex)Yt%Hsm>S>mtv+;YU37`fn`#jI;0Kx*2G0tc(NKZnfB0%;-OMH&n6(QYz{c z0okP)nYleAUHgdVF35(pGiBcR<<)Qj9A@UNrwOJlFdEedvv$P%j&B1E^CPrF^$rpFzHiCLh<*&7JIY1jCtZTQtNBCT+dge|M zx!x+nl=GbTY+|)o7rl z$elRb=BpfVsB@|SunfUuH0ncDfFhXJHtiL$jc)~9sEXGlt&D)@2CB(}P|~b+PHc8o z6iiENQ+xst2YO276{W3NFY~rL25DP02U){(ZYShW@P(ztKNQ2!qX-zXFz%rT1IctqBK1ihw2pd0t5efA&fqF$oEuOIq>lLlXh z(4w$gm-NH#D85`Aw&dL7icK6KrtM~`lV4}&i8S+UiCr`e^R?iZNkLz#AVT^G9ZE}Svl2w5y+xjsE z)a`A&;Drv08h5i#$U>t%rq!}950fKf#rF>lK+jm<4-!4XGn~Wgn@ny70P!Z^_Salc z3@bYd+QN<^K$O%j<{4b6@<6MwG>P~V({)<{=Jg6 zmm9{5d3zTN0aMt@R%SpzTk!S`i9o!wV-z%un}b*pw3!iG0XF{XUm>9IeUvrPJ8WMo zOVDOc0w_Yu7?ZCx2XAl`iHK`|^B|RY%9t=eDU9LsB9*BAruJN3F>socAdudTw8OEc z9@mK_-2&7U=uH3JTFH;(!a5DOb|QtrAs}bt4KkaK>s&OkN!utDBNgW=)ZmRz1R4~c zUI0w%KDs?B-q_M7m(%+7QO|FX{~dLJ$e^bj`5<8s&N~;p7C&`5!B~^~;;%tqeIDg@ zx&B3)Fl5hwO3%P-GCnx2YT#FD`i2p2U0-B#5({joW$n&T;p0a(bR21{_QQrOQ2kYh z-tMdJ^k4uA$QS;N`XSr9(xUc9tOp*31! zGK4g~h;iy}e1p&HCuN(G3bxjk&$L4V3}O@)zG8FTX8t3={K)|&otS4T9%#sX90wXQ zTX!PiUU8tqq;XG0HKnHMd*1@@RS}&)b!!#JkJswLBz5&y#eR!#3b>7nkS*Bq0z?)Q ziS0^)io9aP^odP3{j^uo)EV;yt3v3d|F^L=Nwso09AB00-A2A8nB?RhnQc4!&6*=+ zKjNpCez`puQGP`jfh_Vn=Y|x8jA+Z~QhBFpZ;x_fR!ik5UX5`u|NRAv|nq^GHsriPTHG;}h*cp_=b6(mM z7w-XUayy}5AxIpv?M7tdL1Ow$=7v25L(I>)n)@fZ^!r>hY+V~t-RWFklG#C&`dpb? zYo7KffxpZ7bXsMkLs*BqRKCo)mBpA17&%{(Umwv!F2_%AoIb?TIN~vU{CVu7WkwxT zvp`emf+RaNeCeP8=ufWv+4$A&4LszZ3_b8TMJpy&OUZ<-ttm*V_Jo^N4oB5(jfL>% zl%!Z#YGJe1Qig(Z_o9SK&>cooq7+BQnq1P3#%Zs>ObvMOh;Si68?T@4*aWaPf-+q8 zV}=fDCDj85Yc;ZFm&9(myA?z_#>WML>dbrRI{1 zEm-5W>i*NW@E4V#@IpY6WuE>cEcm<{KkrM-n81i|fyiARJcY%H2@OEmx1lBo;0i6T z{}pzD57HilZo;kQ$5Z39uFlyaLGzdvzyeNjIQNzWbYJf&^~( zsyJ8JnW_+=K%p@>rNcSyth9gP{*uGfQ{g#O?D@&7u0i%QK*KCaTiwMalGHD2u&)Ldd*`SiPx8rH2p`ThlDjbrN%wy`WuxZt_Jl zGoD?PXmFn9X!Jqy^me(;Lo(o3KZdgfPnx~UxuoSUIOI7%Ebn4_dS!pYgPwtiPoRx{ zD2a*2pLX~h5O0-TI$^_*WnE~>7^44oJ4&D@r4=vupjCw{rXj(jWOzh{1-i(E8DbuG zt$G-_^fSJoHL|1J*&6qTPK)w!zX$Wjr0!J**FE*bXq3=H!zGA4+bWbRm|O->+d_b0 zpfq~iDT|KAx+0Kw-M!Es%ZRy537d91*PWU`yW2swKWs}jgH8lpLB@v?E4?5SSd^SZ zqI~kZZ==j->nE7PV9v#Xxq3@L8wQ9KG$y&+>|ZRcFt1hd+Co=7bC^_T)Xn>a3dt7* z-10<=qtD$4_3!|#0_7q8g?5!?e*E7;0iZ(M{rV{RI!`}MsbbChg28vv40`Xs2<094 zPPt}Yp-Id(epJz7h&fri4v4S`NU#GZ2Uo1#wwz0_n%$bo4d&f)f`D2QRy5g)UuN$m@YU)Uc26qZ9=EkzD* z+VlghEf$tvxQv}{N`2V88U`wYr5==?rZO*EbsCk|53~^17TX<{7>D~zbU3UH&vW=(n zmiLx(6jxYSdMLmQX!6BKl$96M5@mIPzJH-2)j|5H>C3mxR|os|eA!|i#hRvl1OToc z7Gnppp$&?NE@@gob>!k3O>hn(k_0#5xroRqzK5O2xgWoe5ER^Q+3Tdv~*?!=ejkM)=_mdTNnr|c%#qM7@hHOl( zhc{Iee7Z(*zwykbxB1M^L=@Qyg5CmJA2?@!dlGB6HntySakrjJe;?rJa}WQ zPTC>qth(w!;03Jtd{008)4~k2A$X%O7-l0&sP3We)=AM!fwcbEs`Sx05fJQ^3!qvy zswL5l#ahM{WKLK4-Y5~rYMZK?-mXj0%B?m@kmN?O(N!a{k*67SI#D`@-l#Rk7G*5NS)~>91v*tF+K?1 zs)4ka(^u9-!UiX45p|= zmU2^U6O3u5FyG;y51k}y|L#{i zmut>M3?0|!=Yr?&E;uB8z5G+^8#wHZ!BJKB8mH7}_*K$2W9&5T3>;t%q#gVVe9f56 zyaME`m`Hw(<+GB7Hs@a$ciZ>8Xjf!)E`aKhsZoPm2*|AiP?OK= zJ(`-|hfsHic9|*y3Nuf#xqe(HR_o95qIAB++QqQQ+@8}nQV#!r4GaJ1pZ#VuR>{=<6jy zzvB>ook}5xDU=ef6Rs0>=RJfi3m)87%RDQFp*|2turN`(7jl;62RyiBh@0SX(z6Un z&j}DJA0t!+{KsWtlOz|qTKmGu0YLeGw-|_k+0&uteT>P)nq@5%3SAe3{7vM!&n7P$Kv+y^B`m|`~xUG}7 z6`Vw5qo@>An6iu8yZ9d=9(~7GoDOshdY;nq&BkJz)jT9 zSmnhh+=arPJczpGCFNS&f;~Kt9esN&0eV%Ihx;-?*p^p5A4P{#I6JP~T=8c71k3wMiu^xVyA~yj`o-5C_~ck|(QuzR&=j zN$Sm*i9DP;fDY980WVL(&rkx`Ck*{2-6jeM^6zUCLf~s~{%4nGiP~DjlG(yce`HX; zcUGdm_3Ed7UMKHn&(eT8UM;kU{z=-C>yXqFHI)?Tzl%N`$T<#TdXV6|o1k8eU zCUyke2%wG%nV=n+&IA1K1tSEL=78+&#$7nF@dcn{XdC)z7!>SE@4JF)$8#CAR&&4u z7zY^?iD@PV0RQCeSO*J5}XOV<< zr#W1&BSmOohAc}#^EB_Fuv#$tTP}5S)!8jGZJSX}8dy>-s0Y^KfH8%c0g8S)^_a6n z?Po6uNLFl(*IYnki#V@dIa7x_LZ0Rkjp*fMHkCi*72F&urT~ey;Lx!Z!ryt<-JE8G>D&7>_5DYp3pFs=)b6(vUKv2P zZqmF<+D&+2yOtkJ;GhW@#f53!>P|#6(a^Dt)(X(vm%7q$t$ah$@ya0)7;6bO{{MyV z;2a>=-Y=wKJ1EL8IFRDi0Za}$%2ZwD73X)hD=}~1Im~2Z{+RMyE~cyQ$U+oZA9nK0 zjz_OJGI&Pa*4FyTJpp7eQqwhn%sPO|lV*8nW7;kp(R8eXbDz)`jHUnYI{%+11Xe2f ztR=tE>4_MeHN>K#ezli=aGlS^-8`_X%V54U*R#Sj7uO1RR+xEUD&Z8l&tKF$;!72C zW{IOb^msa<-0!A6!6EJ;>87qNei2A4gVDkt{taj@MC+N;D%UMy(5vc}Ri80jku2{0 z9=WGdD$XRlq7rKQ81fj*dpedz{sMXA#VY}21hziQQ~IAAa1C+K84j5ong00U`@#S7 z&>|T!03f;mOR6aWK5)ty7rjr0^9P_gXMbCz1@xD~_#Sa1g+&(tiyufub~nh=@?T1- zxQ`;xtCRnFMphOH=cfU;@bzE(`=2An#?53Uiz`rzwOJ`4lPTryCA?fXI-cQu_x?wogRn%y)1nZ# zsgjj+EIU9wN_LeCcqg2nR&79jrs&}hD8I(?gO@AJtkDJ!{qLtK-sMsh zSNON*O27}uaTpMDIVIC_7&EUJH$$quw6Y@oa^qqYXfmGjN|TxdxO$N&iCP712`oyR z%RcQ-VpCxL-+Up^)pS&vmlJ0Exj_F?D0{eK+=q{__iJuR8VUBBzY-R-%U{#}qyt<; zN}pjk&7BvQIg|&71@FbA@E@P$|3NvxS|O%&SEd+aT-cptbJZ=1)IlJ8L9z{i|23zp z62i2aH_&cAzIef^dhlh8KgVjsRqQ}0DSe*Ze&NJZw7%IAUR*I>&+R!q_^kjr#`S#JKE zYh=N*#d*hzF>rd2Fe*&xN^*r~h>eSKiMakeVo+OO|A4jZa&JSP#7%UB1LyIS`J}7g z>21(HtoP^FLtEJX_w`Ji%S4u;QA|$p?>GU0Q<}Q!uytt}K#N6Ji=wCZMlraw^i#17 z^wY`38)@X&;(7n@3G3RO+GEfGW>NOw5=kxnZ>xVEEgAbiSCFjNC*b45glSMWtP zr2<8ElCF=pIpW&+`Rb{=J0nrz!jUfW2)n3D#eHK9L5l~ty9Ke%1cyXw|K8n)$Dlx zHZH4d(RTfLH&%`-3cpyZ0)hkRP$}S!S^j;s=*H&aTBu{NcFIp!TYN0LV(fEP!fEi& zpC5Wkv3IlYz7p@jxYwTO>yvJ~~_(s$D^l@wu5Bf3HqMOT4PXqi3VfMzO zSSW`IWiRw-B-qVc%FC14FO~Ca>tI%^x7e6LG-FGzrLb~rkbS;F)?oVJO3cE$Oky2g zHWf;*(~VXU{rZiv*m@w?5jn<)%>M9E_pif7CSO~(VG;Rx6LapLl1+`hqAC&cm+}ye zF_}+;sF85>FT{CdPcHFaa-dLg+@SbXR$n`mxg+&mHAmw$(INRErD?>)d+%0VZTQb& z^^$uh+j%F-4rRucvMYWYR8QO!w*v9;t|fBxRmD>?=WuepDot;n@iV!-?c_bx1h*{Z z*oWx`>1t?Ubt$n|;`$f~rfv4L7<1@~Yb?Ha3YpCs86YZ_?D|gYhrpO1_V$ER?D_f3 zK4>^RxT!*!xEHwV$+n!xBTZQDq&)N?;+q&+h#r9N_;lw^gW$csMv%yIh>V zgypg@9+%E#D8@<}JWb5t)=89(?OT7fRLb^F7-Rb`u5YE$Tz*tny`cQe1MQIy2 zkxGTc%*berf3iJ)){f{iT3&}sY#oF;iM?xXI`+uLIWg{c=G?~&>0cG4vqnv;`Z7@n z4YYuK66v;N*62zv+Otvs$~`i@Er}^}tI+p)syBFhWx~q}7Y>tGhc3@OM3@6Kz;=j> z))6YYvrxSF5|TbLO7=1zdYYl85TmL44wsH1NaA78)Hv?_OTN-UlTo-G(}#d!c_Wr0 z`*|06z)$qUmlcEw-~hiGoBowRLcP?5cMdstDzW+ekH)Yi2-;5>R_gdo%TQ~&OI4D% z)>RuiF(1ED*eS;a#mEQB^Uh42K(uaUeb9x?HO_>1?ls&4Yk;kh0g>cETVkwp+{LjU z6Q@Q_xh)a~O;Qb_w_-T+lSSJinxng68;(cocF*^if0M+Sc#yGph^?##Lh$Rei53 zPX$%jh6a~j>F910AP!n83S))F7{k0F)CgN_4&I%RX5(M-Rh^I1!F6lr&3D|Ne~o~x z@Z{w0rDNqtbUWv7YN$g?_8vrB>xG87p}wf)Cdedag2Rs8 zEW=q(!h4v1`MYae5TO`ovuXXVbHBnPE<|vLho`3Y*Ver#mQG7#MTvwRJzRW`$JEIc zzJuD>VfmzQ=Hx~5Q*2hMiHyl;>sG!RS^%Lnc(jNW;?u7t&K2JE>ThcH*vU-*qF;G1 zJeTD2d&|@74lh~Ft2Z(7DO3t%u^HS4FKG`?ws|>O+69h#iOJSjvW9bdmgaNZE8abn zmqx{Pb7T#!#8RbIzz~#L{2PX2({3vhSTUf42;;sOynx*pWC@5bF8!RYVlPCcx`$ly~a*Na>c#Y>2yzRSj6Ou{AMLGT8AgSYx5!+`jNOYr@N-Fd!PW`>oRnrY-no>e`=M#+VQa&CF`nVm@R59*H3zd7U;D~J8Hv_)c z9V^vzwV5L}qD5D>O4_7{R2Xq4@iFEZHd0k4sg@$w(U&}BNHvqS63lOSX0}10SsO)l(%cCWOO#yRlcdo<9ID$ zNJO|T?e&bAj;g9EY803~XUc8K=)GL_!ZRTi({#%RPzBX|29#4xh8;@4`Sb(^tYA?j zbWNne90&q4FV7as%lz%6r=7)6Av`v?Has!&U54DqMi@z7-?B&@oIDNniKcl}_R>1} zT^QqN58;8Gz$90XygTj?QTtkV*Po4568vjHDsE1cTodwRqz?2-?6JjsAN*3qOOK|c zM@D+_np(NSM>SjkCMjcV=~@23_rY+bVo7eL8n0-r*TU99iEzT5JJ~*-Yh>>0s=rQ5 zg3{^tE-SsZ;aX=nhAk1Tw^%>xnm(?O(zKw_UUC)b?3)-(G^c3#G062}L|P6*{no~=wyw5C?&uiQ zw{W?nFBnO)qI@Sg_vLO;us8Nt? z0aq+{k8EX4wa^agC+U^EY9yI=sAh$@E8KfinJRNWp-l4V9deJXZzsaXbx&BiZ^x-3 zN_a+id4gGta4J<_KB&v!QYujtPW~l_OAeG%C9f+ayLwDAXKJq$R7X58yx7>=zy7*w zc0KO%@bJy&u+`ZoeX}+;qQy{F<-S9uLN=jR;1STn>5)99R+)`i2@czH!`ZJib=f-z zt)%GNVB(mI|n3$+?4T zX)A76Hz?!I?R1v&*ec^xyi(dP&o*6ceJf`E8Cuw)Eqo`_%I7KrYfXoWWryTQZ;K8L zHq}?GCFZ@vsmQO{xxZ0dIhu~bKyadJJl@F9Fo8`|&{WpZ?OJ-}vMtH2*@;=)3rC3F zeCoVCy>qe^c+)eP4IA#$7kFD)0~pbLc(g!8S^Gwp;X*dappKzVx-NQg-m{QiXxK8? zds})JN(otXyK+dpDL6Scy~9@P;RLN&!FB7tZz8qAAS;6nq_lWB&x$u6Gvy)~{|EjV!yd7-!$uBq!JY1Pc{c3Orcg5DF)Seml)qMwzQlmWrJ`@0su_(>Vx>mG~v^xrLlhY}}uz z@8av$g#}yS$;ZM!8zt#Qd=dLBlkM&a+3;qt}UB6=|K?1v) zZf;k|#m>;*{cEw86c!WU97(VVYb)t0(4N%a5?dnr^h`AVc{WGCjVq;*y=O4PHRgM$ zO6gpLlcht4i9Iezu9o7-Eb$1xZ7KzSF(*$cE{sK3{&xqLB3~ zDpAq-sx4ie)_K9@>Q{Jd7D0EPgo(EX*z+WvNa~~*iv}; zm9Cg)774kEzYaXeK8T$K?V0?s{m7!?=9Z|9u=Oefld%=D(eHGVXF!yv!sn|Xf`JrbIxi3UDbJ1?)Gm=t$Qjf<6!i?QVaO%IiGYzHO*iRllcu zu&C03OT6RaYH22ir$^eP@JU-O(Sd#Y_xJBF?Y#QjM}3kwttxHC9Trzs_F4upI@+)R z1Lh8=6+7k}3yD=Vx=*&kpCzw;QipLQSe{_L){p_hg#F$cMWEYVduP zpt*2_XkT&SP5NmAf_3A6lq&PTCO^r{3Rh7{{cBGwei395^KIbUOYU?w6?q0y;9fYp zIwwYV8kqZ9q~;i8iS>R~Ad~twpxz5L&mA-N^?YxTMM7ozkkUp{1A>ju=y@!^T^7Tm zX^imFSd}8C2oKB;A&;A`R#g8?OKLa9`IY;C`N>YwzzcaB*O6S;5u26O2cn%%$34Ox zcrUz2O}ddjuvGN3y7RYJPXF3~b1eJO$k^!0oSBt$u>l)ez#>8OaIsG4{?YW6l;F9` zbwbu#+QXHcFP@q*iV{>_I{_myx_Ml`ycCfxsjni@!(+xxQNMK|(O+@?vuqG9r&8PS zm=2mf(0$$|0L<=D;QPj?M7mYVb(k&2Nbrq4o8%idWuzJB2&wb5he{^7MK+7?B$vQmIC zvH#KPl^Q2(EeVrs8}UjCe*dC~eQNW}DQf+bk?og9{9Q}CUb{c_F{Ao7vvl%hV($vo zG$0ucbY4Sgqd)afd>gDj+u1AedPrhI)(Ov+`gFkRdpD&Ug{oNq_Y|2lQ*_!M`~*oqqmA`-lKdRF2QfC5vbdCx+HeC z7DwVEIr6m+mW3=)a|m%i}&wMefeK&-`m|*b5?V?I_4b*F%kxc zA!0JQb!hAy*Hm+aQ}khJqv($}tbmTOzn?s{gGQCPukq#NJ*pz>_$|MqTTIM$YNos0 zK%N9^s58JxVrzr?{2+MKFJzcPU&ZztTD7zzjZrbZuiPu zJ3p^XqN9;dykIk#)9$3GRicxJN%HHNbgYALi+7a=_D0a?j~A1ijxm695>Ni9DXvr? zvDV3ibkzwm`;zM-8TLP`P>N$$LWW!99^Oq$1&JXcknDkJn%aJSl*oxqO`OZNaToIg zc_GcDo*qs`UQ=IWBld){-@5RpfXd7w%H6zi$uucYIV=rjj9}j?8{+AT*fsBA*2-6~ zQMNEmBJyh1)^ zTt^IIzMFFsaW?q}k)YPMwt^YjFYpJR#y|fsQX|JTj`+7|I9FPX8WDBdDhz6#O1@~f_mUfE{FOsDB= zivj~%@o`$?Gt~dtI=x2Jjs8eyWefEh5Ey!Jw#PzFEb(OyZ5Q;ra2s9=5H_u!5e+k| zVa0q85*J45>23zV=(Dwpq4zOvFdTd8X6f&7w)$5XA<|A+{;&VpoRa3hq4IN2Manzs ziXd#GpGj9)Mn<+OxcGQ&aiVTzJ&p_7+ET-eFfq6D7FCwu!c9`lYbf|srlII*X%V8t zuWRqrOR6#&O(P$_+V|?YIf(W=`Rt;ytZGG-E$4uHEdb@e>Rn^H$%Lm$1@Pxaxmc%* z6Z$Us*P(i$p1SZ*I+4@N3V#YX3?NN9{Ow*vLEXy)`>l}ZuEO7r!kQXUQL=(s>N%gW zsPDvlturg9?_w22*S_AWx3{_izm+)C+y4yPse`kQgYxHwJky+ehP}Lr+e7Vstt^_~ zrU5a!!^_FIK_g8{#4mU*4myGKdDAp;C5-bwxe!3l{R9Zin#m6-r7G zbr42Erx}iqz64G0_^@3%IJ~9Eaa8&)*{zpxlfaSCCF2t)=i#h)T zk>IpH5sr7{--TqLcaoF8ng2=fspSu}6a`6c#4Hf6q>yE=*kvvx9Im#h+&@~S%w5vC z!2lolHe<^03kBuX{7N4bw;RYzk*#5fOQyc|P)`+q`u-)(0J?wDq$8$()1|ldW7$Ev z3BevI%&^MBk^#iJxS%~HMDR%$ucNzlRE40+6A+WY3`80IpRh0HWWfbqXe^a8U!UYx-&%hdM7ZYSkb^2Lc7rWxf~N zU-I&=)_fiwn!~}a2;3;s^FuDUJiKvEC=dI(7EUCXQ;P8{DQO2jtkr|WkV+ypm2ZR7 ziy@OOGq|L6ie6rJlgy4tQGEh= z!Vs|>#GbJQBTEInRxa+=h-g0SdzX1dXA_z9dz{Lf-bttraz^zg=6 zVbi_pw?-1xz%{r+v0Y)fF8XH$-hVfLL{3Z$L?9p{0_juOirsowr;CGi)Ulw8WU{WA zwRP0`_U#ghcNvBBNHu;w$OM2pD2_siGW|(v89-?B>?59?8vJrYm1@w5h5z1v+(P~T zxKY4zN3{juKaLIZLc~~b!(mNBkKU9#Mr<}L zf0<9w_HA4V6^;K+t#YH<+(W%9j6~xEd{k+o|499Q(Cxw3$`{K3@ura{ndiy1P|Y%n z^v<-fdr{0o3hA0NZL`$pyIW#>pu?dpo#1D#>*A|vT>3rjgb~|@w*E77I`9R8nqiwm zaz;OAbxP|gCU4bd*J`&GUu=GFULos$Dsa7}tt=q}l)db%X!Rl}hoVNTBu(Z#F-VSI z=!pksQ+M+8s|jZB-ly+yw3=3Wu4rzFcMzaki)Tc7gWL5>?nhwK3<#re589X%E?(Fz zzl+NxhQr{6F@#iXq+Ye{CzJ=w9mPJVj_J1B2@Ve?M{w1_+|KcUIGKN~!{Xh$tD~0Dm2K=OL;+?P5=?vi_Q@-S+KiKSf-f zSoQ3TuU3?Rh`S$QL0o0uIomE-b9w@aURNm|Suc=R%_oY4nsQhp?0-H}yxqYFim#u< zaTxhr6LTdV<)~H>CA0m1cek9f#H7Ietw1&nPS$+P{rIqLVix4B2Im^s!2DmU zmYn@Hc@c;xp9WVOtSWFj8sMc=E=Bu-XVSQK(l;0%$&Y^V4x1+H{G!3_Gn#~JH0z1q zCqVqKO}Bf#nY)w;?X=m}P8Wlwobnt= zAjEDF5%t;IRn#$g{(^4RKeaAFM$NC=_hz4{c{STovQvhghNc&^gcoou*Q-wVj$RW zJ-X%7;q{~T=63=fJj^|w5@b;)@bGHigq9oEy4~vx(5SCze*I#vA4@B}4w~x`mkS(- zy5f!3_VD6Po5f#+OH$P{{Eo@u?6_#`8Sqs^Xkj0*a-4r!0`+|fxuGp$wk*DkQJVK5 zX|Y_NBL*!Z;y&v8+dceCS{r-kpAu$ye*jZo*{fVyC1v3`;Hde+TOqd*%04KAJ0VK5 zD6*>MD1zN%8A?HVI#7IjnCJh`6HFMViw+71Ja%q2t9=QaB>?RE*S7YxbMoyF{x)}3 z;*IKb+Z9nuw`beN{6+j;;DhX>UD5f^hR*JaR5tHS7E~efk(cPw%nJoe)ydo+Y>FZ; zLTTK}@Y=ms*Y{$=zB96drS!ln+|*61_xuHrw~-;{64SgvAa|Em_P1Q&*jPsWg~W1) zfbz406QxxOs#BZM>bHMMWXbfIkEgx{GF96s@(cL3|!=+EDgB z`=L|&P!BDZ;t3!jYLxQenx?3j*e)q6+ez!U#KA5D)&5(5`FP&`Y@K>P8TatCDEOR! z6ir4&wNEl5*T8cp4Vl5-&*r8UlA#iwfMlFtKY+1+z8-DqRENNWg9cRN61S)Lb(PgK#F~d1)>kmkV3OoqAJK#R;niw8lJfv@M$1b8cvdFOU?G5&i z`w8L;0^oY4WT46B;DIO}qPxesmT$klC1yF812<*dr(%1TiD_6zRSP=+PyBr<6E1k~ z=h<6zOC%e$fiHviE;wiMf;2{va`74Ey4N4^(Zkfvho-6Qol;D7l-Eu*>%{F%BB*P< zHqir%Q!CnWKeVau`pUH#vlR7r&cuq3p_;8QJFHniCh|?Ia8uudM2D=w(-u*=2Q~9g zz$OKZ-zlzTdBZ}Z0HPwdaTIJn<9_Y(Wr-^AaE^v&SXf9-eNHsAxdC`Z_%4md%2&jC zKBFcMI%dR(+AQTiTt6w zx-U(4PfC_m&gi1f>{O^bAB~Ud9e27+uvx6+IFgEN_$1wBUILAypCelOFNO-=k~hJs zVDzi%zMb@W_ZiFlAwkFvwM?}AltM$#qqd zaKGTWb&}3S-=_T{u!(xTclV=2WL-Q;>gh3zNL3>8t-l-fnP8pDaR;R@29}84#WA~7 zDyi>FhmhB&QT^%b$QA>c%ZEa!gujoomDBy1ax-Fmz>jvB)1T%o@JDIMBTWO2*=sc) zNnt#5HdsN|B-6*LzZMhi6c$?pS2|GIF9@X&HE3S!TN}YbTf3qDv4N;`LkYx+Ty^Vr zd0xuVK4rpHM}rHZv_nO{8HiJql&7s@PStw))jum(4(>ioh4ZXYpA_@r(9?zAsHWnZ z|8NyeWEMqR*4!lPV45j^iM_?n{O+AT?|pz#uh)C)pd;tx>fh#Dbvr`0VdyoiLJvjq z`zcv?u-IKBB`{X@cC=EPC-dJ2!&ip<0C%eSnAhiTQcMUcrLZ87Yht#yB7y&Ty%Pq} z?Vi8*PuB9-$h! z+;BV{CKAdM`b5`F;eerOk+BtM4*d~J%#ajboTJFm*u3ILd6+OlmgAtVd6Bb!S(~JM z@_nnKUj{Z61;x-|ma)HwRr(x<-968#t-&%U1?rpD@y84YSA z7U|ACmT!o>$M8QZrVFn*jQCeVpcq$0dGtohb?o6;6;xuA9$l=Hmtm}Fn}taeE#)tc zk69-};*vH`#!(sU9TkAHhXHh<{L$m)sE=$1o`psQjg*$xRU9eJGEO<9;aYwy!bTvT zkf`<#wolc9%#Mmq2MzxMVTNq|Afdx6Xhrz=;NZYb0rGQcx(jyq>Dzd!9#@2A^p_IU z-AsF;S+##kd}rNN%18)qHajGcpG@<{{9GqbCU4Tk(1?9Tu-R++<}^KnmZ>)<2A4Cp z0Y8Bj`a{Ami0j=b9WVH@9q=->ll?wFRkCdfip6V&-(6Vn#%!OrC5An$cvavRgeP1> z{v(b_o9~zJDsYpsFL0B4L2M6jhL*tHQN=N8b`!x(hbfX%vN*U31syO$b zm1upVp{Hk)_TXQms@^MQ$3$8|Tmk!F(dT)Fg2(mC9&h|! zDG@pOIfF(UXC#|09q0u*KL8+`_FJqszA-Tg0rC~Blv4(y(H3!^+Dfp3a z!BA}U&|*B%9mV6I!aa*W4Jr{)G3kgel)p?& zK!r2Mp9@_;L=n6nq9y`Mh4V^L(4wli(#{r9t23G}CpdTorJk;$dw(<%#T^y=jCh`i z-C~;*xC=Oq+#BX zqZNul&hKwy&dW}#(XZ0kJpOhJQt;2yVhYcQ=$UF3-S_6LI3&pEd0$2CY}oLLaIt}1 z>*$G$IlR@BmLw*1IZ#bdipEC*$~$AKkhk*E$v$HYO_#R@5@B7@ctY+nvHiT0yff19 z^vO^7PB<|T=0JK&nbTt#$pY>H+TXu-mnRtDGvYZylcyV-xFXpM;@rtFk60%+Q>#X&!zDe0|tqsHnYW^FKAQqa8k6KbF zQ=PWL@aK&7IEY=1?T7+Fq!Lr^(ea+Y&~jW@i@u4W;g!z`<+2K*Z*SPqJuyb3&pcUE zOWtrhz`J(0Q~@QeNcLs6X{DT<`Sk&I4TBKWIeqiK`ZdmFUfsipTe-z)?34U=LHAxW zmTPw;n(Qubf7l(8VzB`=U6T1vsU^)l7Q}M(aWD!RvH{FpDE3!dh^YJvgC**d>sP7F z_6tnmcdCJ!JY*pZcgWvJw=CFW7Pb_Hm7LV_5ZD++@x^~4np?YD3Z@jvy9}SU$l>`0 zi5Z-`EX}w$z^AfOsjGT&xAohSg9s%z3#2d{w?LHzDpugjF-Z%PS>u{~4ytq5y77eq1J zLj)QKi_hdxN%}^J$W^6jQSQcX--;n2WDD#MCfD($`8|R_EPAmYrUHJ4pYw&^4e1+F zD)a5CB|m7I4O``!4$7G@Thu;DAESrPT;N?!Kteuy^W1O#2Gb$iP}Td01uILpP}(r! zjt$4vhYp-W53pLS*UyVDN%N#Nwgs1*os(v_;rV;5VQW+*%$r{CWtVZO=91)OB35!< zo^dk2z?AGjsv?aX$vVXP=B4YKd)DxEH_GIfix+M*oW8o3!}fCxWLfr+DI()cY)6M9 zq6E@S(Ykk)T=AX?C||E5V?y1=;VERd+XvV8EMzMm@Ij3265Db;3ACpbgz|p#$waJX z;r}T>SrJR(-Y06o`{a6t65t#x2zW2^Le9*jH&YQ6yN>jbHw{y}`UT#FAZ9(klA60h zh!_vq?u=$*Fy#Tw{7h3j-x!3CnnFt@1M;^$Zi#BtmrmclvDZ9X$&i@FW6V_g+O}n_ zY1`Wk_=g#iT~pfR{nKh6w&(5YVw;4IP$fV9!0s+7cuBoJ(@U3Sy8Ygws!d8j{-^*` zWcoDSkpKDp)D|(bgWoh!F)kcE^uRq}kU6BTMf5-YEWOWOX1ZX7ky#W%Ep9x?X82{> zDZaiQ)Kjz_E#ij{j$atsW6yDxnN6YJ_<7EJyircwoEuFs8>&obv-{+ue zGe*g8=7kx;S9O?EM5}`H{W~%IRgl+^NQf}d2vKJ;9n-_o9rr9^+A30R?t3qMjsN*O z4Ip&_ZMSx_HV59YdBO{tS%Lyv7Dv6ie!gKFQ;jO=dKKANoU;FKcBe#S!wEV2sXE9y zKqg0-o=FEJw2L`=j~^|B2#7(yfb~>3*$kGuKyd1g?pvI1R6@} zve__DVMK0FKFh_F$9j|(7|Tx-`7n72siRd4Z;+msWpbBrr+^37G&=JiOXj%H5|!R& z2#JJ=?G6#!Mw#v<0;h&uh;6bb4?NIY2LiY zjrX-#cd~bp?TJN(#51d5I~r7MhWWvDyg@m8{3`m0ns-i-g6OgyWdL3;U^ zY!hqKa+%G?H`d-fDqvTc;_MV@o??$#(G~Z&g6vlo-WBoz`ApU(!%!_@e_Jzf2jl~O zEULbC34V(L&>>@Dg^d_)agmFD0o?FaO1i-^kUI%CX{x6w-Ldu?!Y;6>s(C8+gF8gH zm^Ng=&j}iYXN_&WKZ(3W0?*SAc_iTPr>WLex@GLD+esOVtlcKYo&ez>MKQvfqOiyZ zk?#q?6Q{P7^~?v74+BVFAbqalE?XaaiC|)4)x$aM>^(W+fW&@bX!gPU#Q{myBk8qn zo(xX4Gb&StZakf>lg>a_T+}zUbeW<_21fYfHK!&+!E)kbFXg1NqJy^;6k!J!D z$97FmkZG&k8W~JxiUsag^FCULEVL}vg9%O<<>fPNWyUSaxVx?zfRrw_-G8J5?D^>!FYV%N613v zw!#32!&Bv791z%Mo$7iG+fNW1M~{cQekvjE=mq@ggDvkr{?Z^E7qk3aKa%9ZiXn$FAw zdmS3J@>=;K`St3|;tzeqgV+ui#{SM!>VpagDxuFUNkHX7Aga}gk6KAPfBT@1$2n>f zw*J>lFviRtr!}~s5@zv{UfwfEFh-DJtEw|rDOU;*DMYW9!i zpzx3P0`LE4xe!Yix0n1OJnyNe?q;J3*1@*j(l8?_FZckbXhv@aCPpW*>Jl z4Y^>Tc%aS%;q4}$wl>$i)X_w8=bs<|S0b-8T?&?4MY>0?JKOXz36;b1{UVdMP2}Tm zc4&CJ+l2<>4Iyb~rb{|AR%4J>6IbTdsu}3_YmiIu2+N|Qu3iNDdjXATzz2%D$XR1i z(HKnD`6xO+gCL%WG$~4~wdzw9po^g{)tUidc^|(6hqd5D)(92y)pq0b_uQC!kf5j}W`D*~&TJK?>rO!53}N7P3J>j9|Tkqo~)8HOVB2G;TGz8r(X z6JL&^MY!k=AQw!0!~nTkb7mf$Z77U2<@S-k-L88?|BbthTX*V4 zT-2Vm<#Rdh%|QW8&laNw>6Ajh1NGc|z%^EE69ED*-KCfiu-F3*`6tivU7>t5URMwT znWQ_ah1~$x-EAZbc$m6n5(~Ph)ibEp>#Vh|xVM=uP;AkiRzyXFl>h;KAu~M%uTg2VX!?U3CZiwsf!A|lrowPH#rkhj4WH({#kZHT>S6r!ZQ&Ql=|6N6c+s@J@^ zs-Lu9no0(^0};3?Ob}cUS&(iU&7CNRWw5R0>lTOU;>(XQMF>fFYT;R~Tb13MsK+ap z!5_~?$k`~R%c8PxS-gIqe>R1xqW2}$zQ}<>aP9oWc7UPYXZ?!IfmQ#?#bkfv{Kcqu z9D?FEXdvkCsxS}+(Z~p6|Ca(iSWOe5*kIk|y|XF!Ju2IdawNdyV>W!i!4G-QNHv_lVY{@$lhDvQ>j5r>Lyim@+IMi?z3l#cFVAR&5K z3)fPh-_IDb1Z$z1ew4KxU|TkG_yIorJjQA$KTKi3ZG7NjYHCZ2fBbGNmqJ+=E*5CF{z z^bj?snpdoE>cz62)N_jy5%5iik$Gp)nBtAO7Mz02|9K?yRNyy(s+C>TqeIR>$!A{# zz*mq_?Y~Z%x?R-Ze0S6Y1s8}FlX^i|F~zc^ujl-xVVp=I0w-A)75lJ2m5_?ex7@2w zE-Ls6O(exJ(65%b4%-;mA=0Od_JWx#%WrHzdXcFQM zsmi~EENtEn%xREU@?V`(aVRE|aMSmy=@X4E%6XdF&IF@APoSl(He$hw)~y5L1IlCp zj$0-T*{Ei^a#CG5&;30%i zo0i}O;;|MKtsXTNbjS!YT7S^jn`$Lf8>(;fB&L^|_m(~W1w%oKpPd9<6ABpvLab?3cyEbE zg&b;npJRmUA%D!d;7msxUNV62lOj~1dd79%WfkJ$1K~DGXoBOQ>ufhj zL5%_1YV`CTOTnXs{}}BWD2AXuvJnagM6&_2e@m!BqOt!Jz{M-+SKg2ak!>56P9EB{_KokE&q!oj+d>-~pz?${^l& z{Sdeu@6^c#%g1`*K(_h3t|b`FRmwy@&YLf1>OBTVtRk@$i1PaaRPi1?l%;{6P-1B1 zi~?psDe(Yj4PVXG!gUJrGH94Q-k%GlQ@xdai367zH)upTzaHPdOa{hH%pNebe8u|CMe5P?L7ypsXxp0O& zTBXiY4uZi?Y!4m=gqE2i%;ur3NvGSGzVIqC7vp3dj%5^hYuIb7E2!(-4~@b_(RHi| z494zoq+(S}(&PZ{J^U2e9CHTOsg)6KY+Y1w(M*%ElhUEyLdCrap?LI3gI1sgdjW1~ z&SV>!iZ6P-J{Mf-))AM5CqSFXZAqsu*!z2=;XTqCV`#=*d<-kpU}Hf{lrN+CpKaWX zZ&$70-J}-AaQ$ckJP=-b^i#bK>#36eI73PNce5_CG-(!YhojtOIlzGvJ=cP@>jGF4 z<39FQg{l74+^KTTJ{kKwYr7TUmVxETdTmtCEQJYqS-(mTOaHVYRs;1kv64=tbx{;M-Q{+@-2VMXx@0%c&t+rpmt6w zFu&vTVdFyL!1prKpDgf=cHH6AdFs$amIMk`i|mtg%PTm80EI!8|7VoksV+8Q3NAWM zgi?5!%`4a!=kNeF&XE8)2_%Y~3J2&UbHBPBAp566n@Bszf>`zAEV0Sj3KJFsR$^$f zXDEfS!CwA<;Y5c7Fo<*4@hwT0%&sCQ`V|sz1uM>-kgSu^+q(f$#u8uLCeE8w=i(-2 zP#~`U(IN~h8BjZJT!}|KOg4yCJQ?qJI}Ca&_Zj(Joix3d9!|gedlmO=uHv_9S;o@C zopssHLJIFN_IZ^Sz$VxZ&B(7fhLFnXDh0ck;_@#Dh8xw#xq1JJu9IoO{Bu2%;4KW! zSBDBjxsQN2cvoqQspO<~XP}uFykF9JDB-4l9P4AToAHV{T3ZFIukDma=Cp+7%-u0v`hLDkY(Ai(mT+meb?0?MqT+%24)h-CLwoqs@NdvZ! zQfPaIpw%;lIo(=_X zSg(o>U#wo+54y3WQZRbOaVK%0^I^b4aO5hzglM3Z{Uj8amXD940EJJF-nOv}nqRlf zr1{E&l7b#FiXI81_zuBuK}?$^{@oc&)+*TLWqUy&M|M)VZ2yxJELCHQ80wd|&s$eD zA>Ug?*MA?l-U|17tQ-_j1!(X;?PtTrwT2n7jf(6;XFX7%5ane3xPl3ZX(2+?D8~?* zZUJ)bMjr9I^J@akzBcIP2IE#GW+Zwy?W%UK3Cf7X6&?-SR932_hVq zzu_9dF_e3BG@`g*FH;??CUjhF<3L3Hp<~+FzK||>)b<_Aayn8GFD_|6_bY3ZSy+bh zD)PPO&Ve6nKJIUoh_vsA1;ATC;N`8*w!8pC#TI(Ob6FyLf|;)KdvVVnNyP6?yZ?+# zyM{-HC*WlYeCfVwI{`L?OJxpQxl~z3530iW@-O{!cGtAxw04`wy7UZe?rl4W6>uI` z@NtDX(MS({hYVlPMDm&-a9nQ+dbTT;R=sC_h1>wZE^pb3XU%e;se87d6$pM(FI9^x#p0rR5J1nAX=lNUSLx+v;CxO5>cM;1X{%Of9zXujJ+QK6Zk zB}?I|tYscx8gAbZ7MY0(Uesj%XhB^xXz8MCtwnnYpetyBD8&!{gHbTp35F&(O4>hg zla+A6=@>`5`+4)Nn|1Xqz1h)4K9n%Y$BfmLfbpr-8&~bRDe!#;`l-W)eb)4 z6{KD|4^yJkHND4OwuaMHs%P>P@yR3B@&+F3)It274(_lhumaqIvTwf^jnX}t2$Z5z zljO@g=AfW>7#mu4Y*P1a(ZT4$4g~Ll%EQ(*tJVUg?xp;1ZzwJ&JUke^AV=n)YZArl zV3W+T--BO?9RD4(7E}g%Sq;EYiY?9JBe&mEa2a{z7RGG;DCY;yWC1^a8|d3(pNw1+ z@jrbBPg?elNfCHM|8`uf0ddi#cd)iIAP>KjAWXBUkXMCUY^a!@Dq9D~M~Qx%sLyu| z_}UuzsQ4pl0!sTzQ}q(+4p~P>SOd$b$gU=3LTF*64cY@of@X=j`&fq*Vv+T^S6T3G ztqHqd^mupJcj?_NF~tc@z*-b_rN@8KlW>$=?ssWAuYQFnN^6K@)tfYdeDY`lNp z`p0+|`7k!r=RR=yT~AR6AGLBWPJsMTM5{g_3;(FvC^{ifKtoNq$@llb+y59Ct$r9G zQP2~b%r8}#N)j}>;nQTr8zy?%sL#>!_2 zqxjS0y7G?n`cUJwa^)%A<)2nhwCT4&=J!p@mT}HXphzx~JxuN>mVycUBLJ!pMoFaK zea1uNS0Qqcc91l%q?6me0=}FXX(ghzwzS!vdi34dk5TyDpRsyz;6IgSGf!`i!M3HvMm+yf9#XMq;x=ZX;iOl9Ct+!kWEldd8A#|E-A9dQ70$ zsN;A&8{h*Fr%*f=4xkzWdvIVICO4EF4{BC5#!yzy9UwK=qY#JHo!~61`}xbiX54#d zkG`Gj91n)OJF>Rskp7!>c&lmCyj6(Wf5g`{Q$3u7?qe55{d3~a-1IFai?j1+qlc_* zKh4*6Q*kLbupZ_;3Vzt56P#^*zc|}2J;iBY-%WA>GKbtuXqNXq)En*fk|({Af%x|dH4F}f2)8KIw^ z9V}93-5Z$4*Vu|uA;bY9w<=-VLI$YXAg_})syA78xt|_eMqiwSsvY~(nF2XX0;%xK z7CPKZtLVH9ObnAY=*Gs&D&;K}cpG2+fj{pPao2)?u2r--pF!iiwLsxfHPqc_qKx6H zdWmqfyC7>>lDA;APmfJB1wP63PzuB-qF}`%O{0%Ur0BiLn$@4S!|-=21GLBwm3Yq_ z^OwRz#XhgvZ!L6}2+;qtOm_`d2Akd61`C1GIQw2S6|*+-j|%SqCmH*%pCs*niYo`* zQfVeR0Nnri_3{s+PkKkO9n7~PAd=-om1u$)KZay*^vl_2XDufDFhHmZlm?|zgd4)? z+shP#g};vfe8e&-KTmF{QI`~I45$mRW#LqCdOEhe-Q3Hc34oyqm0|i$jO&H%W&qP@ zv8QO=NK|*t{nRFB;(vp2vh+|9#!cGoUMe6pr~vYe2G~|Nq8m$npv^WNyNMJWCX|>u zh-5&;qC}ee0%t-M6)_A>0Uk!A5`@&6pefcq;)46owP~~b6^BjP45&>VL?D5%>zGD@KTThDE zft73L&tKdRW33^0b!zaro}|HyIH;A6>t%adK=N0Ekswet6;96wdQ6oIxb(2H^A78u z_9t(KN!9+_04@JC_@){_E8OAojI6XyQ`co9SrY5o&O?4s|4E{a1P}7nEXt z&kVLzf4?zejicp7E#NMg-a?p4azrM5dhn`*Wj_M%}d*=f~kUfZs?GApjK|07gQ*T zdbLifM-NI$tnC2BZmt{nLz1TcpBQ_qpywSmK;%`=N8P2Z!58$H*r&tC+mX{6L)y!4 z>7tF@F^w1$d#%w%FlOGa{pi2yHCv|?P}k$cv>|l^nd%h>4(WNy^njwe9YEA=Ir>=_ zI}HHl%M4&BxfytQPve-vEHG$&{ycn}MzXmbItgl$IT}YAegamx82hDd`T!i*B`~Oa zvFaFrt|Ceg{l+LaJj2#;e(;y=Y!T!JK#HM+BxDlLjUA+V zs54`BMf#EbC^o9l6kKn!LpyCSMuD5-5h4SAfMXKn|9e%_H>LV`Fz^&Zo$P4%ZD8!}-D8WCh& zl3ZIviqNhRfM+U}v{;f>=r-g?$f_XGh3BLQFGyVSf>eR>Mu3tOv&BdA_JcZ*6Uls( zQ;$3&rXFvrIfP&WtH88iqTeYHOZIA!QYlL-YUFy!uG|FBA_SCpPY@j98qRMt4?0g* zughN-Hjq(ven#I;*hYitBdk;Qx4p@S2LkZ0gT97~m{5FVKji8y0&W4h#It;w`Ia<7 z`WqM^V+;B|4B|rl23lf{cHVq8p3ADJ=xU>)Br!JLWH6YI0J*+i#{Qv%RL_hmyow@M z=4mhOJlGGp#Jjw2I*ALpVHSR~#lSu*Cny(t@#M}m9vKCuW8c-|C5_u8nU{Iee-db>XpJ&gjj(grbW z2Ct(U_ZUaN$db1Ab%Rgt6|?f%Mu3Hqk@d9}MTb`)p=FGx=UdQa0t?E7vW0cttIWi8 z&q$5m3duJ39QDyVHl{$C>5spFeaPydA7E-R^RPEQ>>`y?aF0O}wWQaEx&)Gv-k61| z9nOQ02h^qS(wKkO`AbRXw^(XXx$r(9X~0sQkx&WF`SdqR>3AZfiF^{Y&Mjncc5=`! zGLJdI4_rAmv|mgf7-m`YT0ciWICxVR8&kZaOf$f&Gn^I~lxGr+hoyAMj z{A=siu`M7PRl+y|$CdISE&;+Kc0v=pnY^gS&seB_q!Ge!zn-o|6m8d{(g}A-lkhz1 zyZ)fY>|Kfpi@b04epQ99A(j&y;mY5>i6N|^rGm!2b_~DQ$1q|#oSNjD@#=l2_RWNS zz`z>H8GfHtnCzmZ*&X8ncUThA&ie<2p;eH_MXjujzrtbG<-_6^s(Mo}QyU~77zUuL z!&qY*tc#@mZg`C6NcwDjmcW##4n^H13LiR_oluUV=vf1w69$M$2VzXSoU zD_ethdt#d;jDDE%rD_L7a@r3#(rWyr28Xj}zW1_blXK-K`^@5ntMNx?G-sR@fDGin z*jk(8N`UzW_{=k~aJ}tSAE92ERfFhe6pY;oA15Ae)HVUDsVC z)0!&EX{7)(@!ACKlIz2axZMAY@Fb9lm>=eA76wpWvdIR0N1iq1$*<_aD=GAA7Q9+<1<{0o<%hBH-$FVlG(=0%bFJzG;!!#T^Su%qfzgHzBIE33$TWKvMD0 z@`?t>&m-yU2vgz~8v$1YcZXVG9B0H(2{)S02`$J25xv)UESDTCu)tO(F}s8A#~mP2 zQfjXG;XW2w0{UTBLT$k*K@&Eg5%)@(DTqOa2rLM-4M|T_Y7=%Xh))}mxv+6Jb9r{6 zB9_31~{3v>I^(M7gK9#{BKC<<|Ky4>BP$5+iCmmmf&+ zWQ)=xA!|`cAM0eWTDKA)Q_x8Ga+>dz!NtY9G+rPAJi2_ZQ*_svty9OIM4tN{bqUae znb~Awj?|<)7H{0+BaT^~<6zbc@ErLoUGRzcqFz39u%bzYA9>pW3Km&7Z{*KtlgkEcZ0dj5o%{wB&*8t zP;_$vNc+~gambOcGJ5{XUSp{f(k4!uU(f}BBoS1_2fhqBXKHSyI#&ematK&)QPG^- zz@TeLa4TQvRir9k)IC5A<(ye|XaDk>L87zewsRdkp8gsxk%Z-at^Zx-1MN zfIVg~H&6om~YpO?|!W}n2i$RNH zrq7Zc+m@sNK{b8%w=q`Q;w_c*orU8`?;Q$T5z__isVBdu)4e$zP3}oh<6?^`n)YL= z077;bxG9Hi6}~`0z66~S>J+5y@7HnF*hIgKnVmlh3NpzcLT#QW{btmMopD@~V!>eG z1mGDTSr5?eaSaEC zp3GS>&0dv{$FQT8mmoB3kwc~N`q6;YK{o_P#^=M&^r2OwBAW?lJ)$3GYLQ_P709D& zQPjU8&y@DE@?~iRPT-b7tf7agDQ`SeVNK)^YJK2K^3#o~`K?l5wEYc6bBhor_nquz zu9%^p{>~uNRSy^kYM>2DgSnv$8?WHlK^uWqpKxQCCFC@z1FO`pk7{ORZ;xX(bzBUN zFBB4CsTo;}dJd{tPJWKR57jhBFfYNEEoNp+Zo|!mY~dgaz?OA7aAh)oSF9dy24oW6 zvQcZ`W3zH^y=@E-?Eaq=WMivfy!#kE8|Al>1d1nq?WY@feHvV2Th=28Is(dbz84xK ztGzKIsmXe8N?JgU+K$eXll(q~<-X=)H`jZDtp#|ZkSC^y;Y-E{-H7aSfzS9{VL+0Q z%Mvu(QLL?2CpD%*1FL?flr7#4<8d+8Q9L}+v5l4f&6lZbTd(r~GE|C(r&3?iR-LQs zVQx^|0T~m~a>nBOD$))xkX|WQpR7GPOCI1LGHLMe&+)Q2H<%^=-AA>RszO5{{!1YK z**2t&Pu>e9n1oQXc9Ipe^22TipP8OBctel4?x^rRMI@#Fqa7qWHs_z5~#z- z;IVF>6JbjmpBUJ8pD}CGBEj0H_Wso->ThBEjMeoOrm@I6=moYm;i?_oYdmpUOjsLY zK?+5wwn0eoG?@2FLwUiWs_nm)l4?K#-^|@KJ?(B)y!xO)p#(Ipal{bnCet&NcHb&5 zuT5&QI-H@{r$!nOv?AS*eIv_Lh+;~jD7`J;tymP>+@wvgBljI!38;Z%Eh^xD^VX2b ziN@WS$@;gXL~?2D+g$?1grv%W-Rj1O;kmGNBGVtBQIhsK%9FHtu)R(>#Bl>A_p~cf zvl)HVy+aNb$VV}yu?l-e=-yub1-Y3wQ1yOCzcK&<5Vo&27qY#onx_c1gPcmL zB4-OVDSZ%esMKPj0YhpVL4wBin!hm6<-V2Ngt-6E(+{43rChDqx-59}k3;lx;;cu3 zZV6Nelnt3PRdT>>M}+P86pf)QjV9Be0RuqsD<7i8#uM5DT%@xSTfF&fAB%n6pa7wf zn^OPn>JyR@T_0p{(4m403T-0uXm#5zLOA0fQ+ZmUttSNZRWgt7wwr8;GL$&cE3F1mBb^50p4?D|2*s98qF{lM3lz6t__n&9>gCf6+Y+`UXd6;VzDV01z+T-EXF}U{wR#ah$_#`1Pc2o_N zkvdR&gYIXbWLHQCM_Ciks~^HAZh=&C2uEl%4=bLx{T4C2UM&PxqB0;8ukL~|L1hCN zl+}WYdz!ONGDJW`<@9Uv<0FWH0HG#-jO7B!F?s*NXp2)+IyLwCd%3K_5UR)YDlnG8 zV{`*1T79EfG5_4=F8M6I-qDmi^dkz4iOVsVw8DsmWZ)A-6%xKYNW7YVBA=^B=&)bM zHw;Sbshe20cBX2|-u&FtopP6pbg11`+ay`h;1kY1`I0sL5=)jO9ob|RCY^sHhMEq; zM%Ny|n4Dc1UU)FPk9mQ)`%z#O$0w)~*6cx~zKn@fjq_u2szY+cFk-Bj`w<cw%A7D6AMwTM5h@d z&qF~KONHy>%bk*H3A}B{PNjs|A-rJslY`NaJnC%OjmB@aLqDM?e%FC3w`C`4cxP(r zjv(CUlW;>%CZx*ty0EkhWGgpY9hiwc`WhZWhSOKAnh@%|Vl0@Oc#o0Rc`^Nsp-J=? z)7T$6As$_wUT*@3$}lc$daq*JxHc~1^cCcl*E>ei)!tP93UXoQ4z^3X!Atl{{lf3d z7F$I}sG%kZAk)gysqeQIuDJtqS;nq$Z>j-$)+0imXyD zFT(^U<1hOOlCOhkiZeWK=aF`uR+tX8GhZ4T8gfeoHbS zeb*eVKL&tKLvZJf1%q?Mvjg@9w#FV|t~m^T%p5J*i%VByy<@#{YYRF0;B~tbs<{Wy zpT$DWqE}aU(h{KFta&jv=LNR+{8wldC}GQ^{{_&^YA4Wo=kU<}9$r=^mPgXz0ZUh` zzkI5TAUntd5RTZBk$`@g=nZ(RE`Y$e9WboH2jH(_Hqa{8$Nf_!2pquhaWLiHDF)|E z>@kmCUgan`!a5i1Y3rwYW7r<+IPgUCbOn#?p;vr`wa$^lL7NnJ0G9pk4ED$6Fks?( zp8=btbloo=eGiJSX1VRjexTSF6gOyy`GKcW-4LspikF^BfBz)D<31S4hW%7DaXYQ`R z>uY6F8!G~SV6@t#=x8P=M0AI!!CM7RFKVA)9+(aXQON+rfqZ|X5zo(an`Q|-gM2Yu zha~0*KLv`e1EE)&MaRl`2^=&~*s=-%xBDrtvfyCbD}QcL01d7T;UgW!y7XlOyPX?- z;cU*+N%rY&(=N;)VAM{X7Gd=tE0EmO4FKrjIpHC^upJNb;oa0(&<@a!{z3Ki9*ZK= zOqd)M+(-%H3qpqRx{J1jJb?M>6!SwX^spMeF7#}8q;o_~BuC`jMdlfzD`48)tvQSh z&-7gX*3h3%RaLybNru38OAdB65dK!s?>L{pAZ=zS6s_XH<0zB%RRa10bixn-a3eeL zuc}y5h2AQ<0(SR-9+ohnPe=j{r39ui(=bAjE-#b=w769D%RB${v=*AkJa)hO$J0;8IvzF?Adq+O{(1drC*;3> wnB^x!{(BFBEJT@zZT_XQn*sgrk9RL%54i&Wc0dY#Wc?@eL)O?56OYUP1JKP74gdfE diff --git a/attic/values/dex/templates/dex/static/img/oidc-icon.svg b/attic/values/dex/templates/dex/static/img/oidc-icon.svg deleted file mode 100644 index e2817b0a..00000000 --- a/attic/values/dex/templates/dex/static/img/oidc-icon.svg +++ /dev/null @@ -1,156 +0,0 @@ - - - - - facebook web - - - - - - - - - - - - - image/svg+xml - - facebook web - - - User:ZyMOS - - - - - - - - - - - - - - - Open Icon Library - - - - - - - - - - - - - - - - - - diff --git a/attic/values/dex/templates/dex/static/img/saml-icon.svg b/attic/values/dex/templates/dex/static/img/saml-icon.svg deleted file mode 100644 index 506dadc0..00000000 --- a/attic/values/dex/templates/dex/static/img/saml-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Combined-Shape - Created with Sketch. - - - - - diff --git a/attic/values/dex/templates/dex/static/js/index.c3f9eb2e.js b/attic/values/dex/templates/dex/static/js/index.c3f9eb2e.js deleted file mode 100644 index 20025e83..00000000 --- a/attic/values/dex/templates/dex/static/js/index.c3f9eb2e.js +++ /dev/null @@ -1,44 +0,0 @@ -import{s as Je,y as Ke}from"./vendor.86e21c29.js";const Ze=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerpolicy&&(i.referrerPolicy=o.referrerpolicy),o.crossorigin==="use-credentials"?i.credentials="include":o.crossorigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}};Ze();function q(e){return Array.isArray(e)||ArrayBuffer.isView(e)}function ze(e){return typeof e.CompareTo=="function"}function Xe(e){return typeof e.Equals=="function"}function Ye(e){return typeof e.GetHashCode=="function"}function we(e,t){return Object.getPrototypeOf(e).constructor===Object.getPrototypeOf(t).constructor}class Qe{constructor(t){this.iter=t}["System.Collections.Generic.IEnumerator`1.get_Current"](){return this.current}["System.Collections.IEnumerator.get_Current"](){return this.current}["System.Collections.IEnumerator.MoveNext"](){const t=this.iter.next();return this.current=t.value,!t.done}["System.Collections.IEnumerator.Reset"](){throw new Error("JS iterators cannot be reset")}Dispose(){}}function le(e){return typeof e.GetEnumerator=="function"?e.GetEnumerator():new Qe(e[Symbol.iterator]())}function $e(e){return{[Symbol.iterator](){return this},next(){const t=e["System.Collections.IEnumerator.MoveNext"](),n=t?e["System.Collections.IEnumerator.get_Current"]():void 0;return{done:!t,value:n}}}}function me(e){const t=e;return typeof t.offset=="number"?t.offset:e.kind===1?0:e.getTimezoneOffset()*-6e4}class P{static id(t){return P.idMap.has(t)||P.idMap.set(t,++P.count),P.idMap.get(t)}}P.idMap=new WeakMap;P.count=0;function et(e){let t=0,n=5381;const r=e.length;for(;t(t<<5)+t^n)}function tt(e){return e.getTime()}function nt(e){const t=e.length,n=new Array(t);for(let r=0;rne(n));return te(t)}else return ae(P.id(e))}}}function rt(e,t,n){if(e==null)return t==null;if(t==null||e.length!==t.length)return!1;for(let r=0;rt===1?n(...e.concat([r])):be(e.concat([r]),t-1,n)}function ct(e,t){return t==null||t.length===1?t:ve in t?t[ve]:be([],e,t)}function ft(e){let t=0,n="[";for(const r of e){if(t===0)n+=H(r);else if(t===100){n+="; ...";break}else n+="; "+H(r);t++}return n+"]"}function H(e,t=0){if(e!=null&&typeof e=="object"){if(typeof e.toString=="function")return e.toString();if(Symbol.iterator in e)return ft(e);{const n=Object.getPrototypeOf(e).constructor;return n===Object&&t<10?"{ "+Object.entries(e).map(([r,o])=>r+" = "+H(o,t+1)).join(` - `)+" }":n.name}}return String(e)}function lt(e,t){if(t.length===0)return e;{let n="",r=!0;return t.length===1?(n=H(t[0]),r=n.indexOf(" ")>=0):n=t.map(o=>H(o)).join(", "),e+(r?" (":" ")+n+(r?")":"")}}class at{get name(){return this.cases()[this.tag]}toJSON(){return this.fields.length===0?this.name:[this.name].concat(this.fields)}toString(){return lt(this.name,this.fields)}GetHashCode(){const t=this.fields.map(n=>ne(n));return t.splice(0,0,ae(this.tag)),te(t)}Equals(t){return this===t?!0:we(this,t)&&this.tag===t.tag?de(this.fields,t.fields):!1}CompareTo(t){return this===t?0:we(this,t)?this.tag===t.tag?Fe(this.fields,t.fields):this.tagt,this.setter=r=>{t=r})}get contents(){return this.getter()}set contents(t){this.setter(t)}}class gt{}const Se=Symbol("numeric");var g={GetHashCode(){return te([this.s,this.e].concat(this.c))},Equals(e){return!this.cmp(e)},CompareTo(e){return this.cmp(e)},[Se](){const e=this;return{multiply:t=>e.mul(t),toPrecision:t=>e.toPrecision(t),toExponential:t=>e.toExponential(t),toFixed:t=>e.toFixed(t),toHex:()=>(Number(e)>>>0).toString(16)}}},pt=28,_t=1,R=1e6,ye=1e6,wt=-29,mt=29,dt=!1,z="[big.js] ",A=z+"Invalid ",re=A+"decimal places",Et=A+"rounding mode",Ie=z+"Division by zero",C=void 0,Ft=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function Ce(){function e(t){var n=this;if(!(n instanceof e))return t===C?Ce():new e(t);if(t instanceof e)n.s=t.s,n.e=t.e,n.c=t.c.slice(),vt(n);else{if(typeof t!="string"){if(e.strict===!0)throw TypeError(A+"number");t=t===0&&1/t<0?"-0":String(t)}bt(n,t)}n.constructor=e}return e.prototype=g,e.DP=pt,e.RM=_t,e.NE=wt,e.PE=mt,e.strict=dt,e}function vt(e){if(e.c.length>1&&!e.c[0]){let t=e.c.findIndex(n=>n);e.c=e.c.slice(t),e.e=e.e-t}}function bt(e,t){var n,r,o;if(!Ft.test(t))throw Error(A+"number");for(e.s=t.charAt(0)=="-"?(t=t.slice(1),-1):1,(n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),o=t.length,r=0;r=5||n===2&&(o[0]>5||o[0]===5&&(r||o[1]!==C))),o.length=1,r?(e.e=e.e-t+1,o[0]=1):o[0]=e.e=0;else if(tu>=t&&s>0)<0;if(r=n===1&&o[t]>=5||n===2&&(o[t]>5||o[t]===5&&(r||o[t+1]!==C||o[t-1]&1))||n===3&&(r||!i),o.length=t--,r)for(;++o[t]>9;)o[t]=0,t--||(++e.e,o.unshift(1));for(t=o.length;!o[--t];)o.pop()}return e}function U(e,t,n){var r=e.e,o=e.c.join(""),i=o.length;if(t)o=o.charAt(0)+(i>1?"."+o.slice(1):"")+(r<0?"e":"e+")+r;else if(r<0){for(;++r;)o="0"+o;o="0."+o}else if(r>0)if(++r>i)for(r-=i;r--;)o+="0";else r1&&(o=o.charAt(0)+"."+o.slice(1));return e.s<0&&n?"-"+o:o}g.abs=function(){var e=new this.constructor(this);return e.s=1,e};g.cmp=function(e){var t,n=this.constructor,r=new n(this),e=new n(e),o=r.c,i=e.c,s=r.s,u=e.s,f=r.e,c=e.e;if(!o[0]||!i[0])return o[0]?s:i[0]?-u:0;if(s!=u)return s;if(t=s<0,f!=c)return f>c^t?1:-1;for(u=Math.max(o.length,i.length),s=0;sc^t?1:-1;return 0};g.div=function(e){var t=this.constructor,n=new t(this),e=new t(e),r=n.c,o=e.c,i=n.s==e.s?1:-1,s=t.DP;if(s!==~~s||s<0||s>R)throw Error(re);if(!o[0])throw Error(Ie);if(!r[0])return e.s=i,e.c=[e.e=0],e;var u,f,c,l,a,h=o.slice(),p=u=o.length,I=r.length,_=r.slice(0,u),d=_.length,T=e,ce=T.c=[],fe=0,K=s+(T.e=n.e-e.e)+1;for(T.s=i,i=K<0?0:K,h.unshift(0);d++d?1:-1;else for(a=-1,l=0;++a_[a]?1:-1;break}if(l<0){for(f=d==u?o:h;d;){if(_[--d]K&&k(T,K,t.RM,_[0]!==C),T};g.eq=function(e){return this.cmp(e)===0};g.gt=function(e){return this.cmp(e)>0};g.gte=function(e){return this.cmp(e)>-1};g.lt=function(e){return this.cmp(e)<0};g.lte=function(e){return this.cmp(e)<1};g.minus=g.sub=function(e){var t,n,r,o,i=this.constructor,s=new i(this),e=new i(e),u=s.s,f=e.s;if(u!=f)return e.s=-f,s.plus(e);var c=s.c.slice(),l=s.e,a=e.c,h=e.e;if(!c[0]||!a[0])return a[0]?e.s=-f:c[0]?e=new i(s):e.s=1,e;if(u=l-h){for((o=u<0)?(u=-u,r=c):(h=l,r=a),r.reverse(),f=u;f--;)r.push(0);r.reverse()}else for(n=((o=c.length0)for(;f--;)c[t++]=0;for(f=t;n>u;){if(c[--n]0?(f=s,r=c):(t=-t,r=u),r.reverse();t--;)r.push(0);r.reverse()}for(u.length-c.length<0&&(r=c,c=u,u=r),t=c.length,n=0;t;u[t]%=10)n=(u[--t]=u[t]+c[t]+n)/10|0;for(n&&(u.unshift(n),++f),t=u.length;u[--t]===0;)u.pop();return e.c=u,e.e=f,e};g.pow=function(e){var t=this.constructor,n=new t(this),r=new t("1"),o=new t("1"),i=e<0;if(e!==~~e||e<-ye||e>ye)throw Error(A+"exponent");for(i&&(e=-e);e&1&&(r=r.times(n)),e>>=1,!!e;)n=n.times(n);return i?o.div(r):r};g.prec=function(e,t){if(e!==~~e||e<1||e>R)throw Error(A+"precision");return k(new this.constructor(this),e,t)};g.round=function(e,t){if(e===C)e=0;else if(e!==~~e||e<-R||e>R)throw Error(re);return k(new this.constructor(this),e+this.e+1,t)};g.sqrt=function(){var e,t,n,r=this.constructor,o=new r(this),i=o.s,s=o.e,u=new r("0.5");if(!o.c[0])return new r(o);if(i<0)throw Error(z+"No square root");i=Math.sqrt(o+""),i===0||i===1/0?(t=o.c.join(""),t.length+s&1||(t+="0"),i=Math.sqrt(t),s=((s+1)/2|0)-(s<0||s&1),e=new r((i==1/0?"5e":(i=i.toExponential()).slice(0,i.indexOf("e")+1))+s)):e=new r(i+""),s=e.e+(r.DP+=4);do n=e,e=u.times(n.plus(o.div(n)));while(n.c.slice(0,s).join("")!==e.c.slice(0,s).join(""));return k(e,(r.DP-=4)+e.e+1,r.RM)};g.times=g.mul=function(e){var t,n=this.constructor,r=new n(this),e=new n(e),o=r.c,i=e.c,s=o.length,u=i.length,f=r.e,c=e.e;if(e.s=r.s==e.s?1:-1,!o[0]||!i[0])return e.c=[e.e=0],e;for(e.e=f+c,sf;)u=t[c]+i[f]*o[c-f-1]+u,t[c--]=u%10,u=u/10|0;t[c]=u}for(u?++e.e:t.shift(),f=t.length;!t[--f];)t.pop();return e.c=t,e};g.toExponential=function(e,t){var n=this,r=n.c[0];if(e!==C){if(e!==~~e||e<0||e>R)throw Error(re);for(n=k(new n.constructor(n),++e,t);n.c.lengthR)throw Error(re);for(n=k(new n.constructor(n),e+n.e+1,t),e=e+n.e+1;n.c.length=t.PE,!!e.c[0])};g.toNumber=function(){var e=Number(U(this,!0,!0));if(this.constructor.strict===!0&&!this.eq(e.toString()))throw Error(z+"Imprecise conversion");return e};g.toPrecision=function(e,t){var n=this,r=n.constructor,o=n.c[0];if(e!==C){if(e!==~~e||e<1||e>R)throw Error(A+"precision");for(n=k(new r(n),e,t);n.c.length=r.PE,!!o)};g.valueOf=function(){var e=this,t=e.constructor;if(t.strict===!0)throw Error(z+"valueOf disallowed");return U(e,e.e<=t.NE||e.e>=t.PE,!0)};var D=Ce();new D(0);new D(1);new D(-1);new D("79228162514264337593543950335");new D("-79228162514264337593543950335");var Oe;(function(e){e[e.AllowHexSpecifier=512]="AllowHexSpecifier"})(Oe||(Oe={}));var M=null;try{M=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function O(e,t,n){this.low=e|0,this.high=t|0,this.unsigned=!!n}O.prototype.GetHashCode=function(){let e=this.unsigned?1:0;return e=(e<<5)+e^this.high,e=(e<<5)+e^this.low,e};O.prototype.Equals=function(e){return v(this,e)};O.prototype.CompareTo=function(e){return se(this,e)};O.prototype.toString=function(e){return Q(this,e)};O.prototype.toJSON=function(){return Q(this)};O.prototype[Se]=function(){const e=this;return{multiply:t=>y(e,t),toPrecision:t=>String(e)+0 .toPrecision(t).substr(1),toExponential:t=>String(e)+0 .toExponential(t).substr(1),toFixed:t=>String(e)+0 .toFixed(t).substr(1),toHex:()=>Q(e.unsigned?e:jt(Lt(e),!0),16)}};Object.defineProperty(O.prototype,"__isLong__",{value:!0});function N(e){return(e&&e.__isLong__)===!0}var Ne={},Pe={};function V(e,t){var n,r,o;return t?(e>>>=0,(o=0<=e&&e<256)&&(r=Pe[e],r)?r:(n=w(e,(e|0)<0?-1:0,!0),o&&(Pe[e]=n),n)):(e|=0,(o=-128<=e&&e<128)&&(r=Ne[e],r)?r:(n=w(e,e<0?-1:0,!1),o&&(Ne[e]=n),n))}function b(e,t){if(isNaN(e))return t?L:S;if(t){if(e<0)return L;if(e>=Me)return Ct}else{if(e<=-Le)return E;if(e+1>=Le)return It}return e<0?m(b(-e,t)):w(e%G|0,e/G|0,t)}function w(e,t,n){return new O(e,t,n)}var oe=Math.pow;function ke(e,t,n){if(e.length===0)throw Error("empty string");if(e==="NaN"||e==="Infinity"||e==="+Infinity"||e==="-Infinity")return S;if(typeof t=="number"?(n=t,t=!1):t=!!t,n=n||10,n<2||360)throw Error("interior hyphen");if(r===0)return m(ke(e.substring(1),t,n));for(var o=b(oe(n,8)),i=S,s=0;s>>0:e.low}function ie(e){return e.unsigned?(e.high>>>0)*G+(e.low>>>0):e.high*G+(e.low>>>0)}function Q(e,t){if(t=t||10,t<2||36>>0,l=c.toString(t);if(s=f,j(s))return l+u;for(;l.length<6;)l="0"+l;u=""+l+u}}function j(e){return e.high===0&&e.low===0}function F(e){return!e.unsigned&&e.high<0}function je(e){return(e.low&1)==1}function v(e,t){return N(t)||(t=W(t)),e.unsigned!==t.unsigned&&e.high>>>31==1&&t.high>>>31==1?!1:e.high===t.high&&e.low===t.low}function xe(e,t){return se(e,t)<0}function ge(e,t){return se(e,t)>0}function Ot(e,t){return se(e,t)>=0}function se(e,t){if(N(t)||(t=W(t)),v(e,t))return 0;var n=F(e),r=F(t);return n&&!r?-1:!n&&r?1:e.unsigned?t.high>>>0>e.high>>>0||t.high===e.high&&t.low>>>0>e.low>>>0?-1:1:F($(e,t))?-1:1}function m(e){return!e.unsigned&&v(e,E)?E:B(Nt(e),X)}function B(e,t){N(t)||(t=W(t));var n=e.high>>>16,r=e.high&65535,o=e.low>>>16,i=e.low&65535,s=t.high>>>16,u=t.high&65535,f=t.low>>>16,c=t.low&65535,l=0,a=0,h=0,p=0;return p+=i+c,h+=p>>>16,p&=65535,h+=o+f,a+=h>>>16,h&=65535,a+=r+u,l+=a>>>16,a&=65535,l+=n+s,l&=65535,w(h<<16|p,l<<16|a,e.unsigned)}function $(e,t){return N(t)||(t=W(t)),B(e,m(t))}function y(e,t){if(j(e))return e.unsigned?L:S;if(N(t)||(t=W(t)),M){var n=M.mul(e.low,e.high,t.low,t.high);return w(n,M.get_high(),e.unsigned)}if(j(t))return e.unsigned?L:S;if(v(e,E))return je(t)?E:S;if(v(t,E))return je(e)?E:S;if(F(e))return F(t)?y(m(e),m(t)):m(y(m(e),t));if(F(t))return m(y(e,m(t)));if(xe(e,Re)&&xe(t,Re))return b(ie(e)*ie(t),e.unsigned);var r=e.high>>>16,o=e.high&65535,i=e.low>>>16,s=e.low&65535,u=t.high>>>16,f=t.high&65535,c=t.low>>>16,l=t.low&65535,a=0,h=0,p=0,I=0;return I+=s*l,p+=I>>>16,I&=65535,p+=i*l,h+=p>>>16,p&=65535,p+=s*c,h+=p>>>16,p&=65535,h+=o*l,a+=h>>>16,h&=65535,h+=i*c,a+=h>>>16,h&=65535,h+=s*f,a+=h>>>16,h&=65535,a+=r*l+o*c+i*f+s*u,a&=65535,w(p<<16|I,a<<16|h,e.unsigned)}function x(e,t){if(N(t)||(t=W(t)),j(t))throw Error("division by zero");if(M){if(!e.unsigned&&e.high===-2147483648&&t.low===-1&&t.high===-1)return e;var n=(e.unsigned?M.div_u:M.div_s)(e.low,e.high,t.low,t.high);return w(n,M.get_high(),e.unsigned)}if(j(e))return e.unsigned?L:S;var r,o,i;if(e.unsigned){if(t.unsigned||(t=Mt(t)),ge(t,e))return L;if(ge(t,Dt(e,1)))return yt;i=L}else{if(v(e,E)){if(v(t,X)||v(t,Ae))return E;if(v(t,E))return X;var s=kt(e,1);return r=Pt(x(s,t),1),v(r,S)?F(t)?X:Ae:(o=$(e,y(t,r)),i=B(r,x(o,t)),i)}else if(v(t,E))return e.unsigned?L:S;if(F(e))return F(t)?x(m(e),m(t)):m(x(m(e),t));if(F(t))return m(x(e,m(t)));i=S}for(o=e;Ot(o,t);){r=Math.max(1,Math.floor(ie(o)/ie(t)));for(var u=Math.ceil(Math.log(r)/Math.LN2),f=u<=48?1:oe(2,u-48),c=b(r),l=y(c,t);F(l)||ge(l,o);)r-=f,c=b(r,e.unsigned),l=y(c,t);j(c)&&(c=X),i=B(i,c),o=$(o,l)}return i}function Nt(e){return w(~e.low,~e.high,e.unsigned)}function Pt(e,t){return N(t)&&(t=Y(t)),(t&=63)==0?e:t<32?w(e.low<>>32-t,e.unsigned):w(0,e.low<>>t|e.high<<32-t,e.high>>t,e.unsigned):w(e.high>>t-32,e.high>=0?0:-1,e.unsigned)}function Dt(e,t){if(N(t)&&(t=Y(t)),t&=63,t===0)return e;var n=e.high;if(t<32){var r=e.low;return w(r>>>t|n<<32-t,n>>>t,e.unsigned)}else return w(t===32?n:n>>>t-32,0,e.unsigned)}function Mt(e){return e.unsigned?e:w(e.low,e.high,!0)}function Lt(e,t){return t?Rt(e):At(e)}function Rt(e){var t=e.high,n=e.low;return[n&255,n>>>8&255,n>>>16&255,n>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]}function At(e){var t=e.high,n=e.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,n>>>24,n>>>16&255,n>>>8&255,n&255]}function jt(e,t,n){return n?xt(e,t):Tt(e,t)}function xt(e,t){return new O(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)}function Tt(e,t){return new O(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}class J{constructor(t){this.value=t}toJSON(){return this.value}toString(){return String(this.value)}GetHashCode(){return ne(this.value)}Equals(t){return t==null?!1:Z(this.value,t instanceof J?t.value:t)}CompareTo(t){return t==null?1:he(this.value,t instanceof J?t.value:t)}}function pe(e){return e==null||e instanceof J?new J(e):e}function ue(e){if(e==null)throw new Error("Option has no value");return e instanceof J?e.value:e}function Te(e){return e==null?[]:[ue(e)]}function qt(e,...t){return{strs:e,args:t}}function Ht(e){throw new Error(e)}function Ut(e,t,n,r){const o=t|0;return e.fill(r,o,o+n)}function Vt(e,t,n){if(t==null)return n==null;if(n==null)return!1;{let r=0,o=!0;const i=t.length|0,s=n.length|0;if(i>s)return!1;if(i{e:for(;;){const o=n,s=r.tail;if(s!=null){n=o+1,r=s;continue e}else return o|0}})(0,e)|0}function Bt(e){if(e.tail!=null)return e.head;throw new Error(qe+"\\nParameter name: list")}function Jt(e){const t=e.tail;if(t!=null)return t;throw new Error(qe+"\\nParameter name: list")}function Kt(e){const t=Gt(e)|0,n=Ut(new Array(t),0,t,null);return((o,i)=>{e:for(;;){const s=o,u=i;if(!Wt(u)){n[s]=Bt(u),o=s+1,i=Jt(u);continue e}break}})(0,e),n}const Zt="Enumeration already finished.",zt="Enumeration has not started. Call MoveNext.",Xt="Reset is not supported on this enumerator.";function Yt(){throw new Error(Xt)}function Qt(){throw new Error(zt)}function $t(){throw new Error(Zt)}class en{constructor(t){this.f=t}toString(){const t=this,n=4;let r=0,o="seq [";const i=le(t);try{for(;r0&&(o=o+"; "),o=o+H(i["System.Collections.Generic.IEnumerator`1.get_Current"]()),r=r+1|0;return r===n&&(o=o+"; ..."),o+"]"}finally{i.Dispose()}}GetEnumerator(){return this.f()}[Symbol.iterator](){return $e(this.GetEnumerator())}["System.Collections.IEnumerable.GetEnumerator"](){return this.f()}}function tn(e){return new en(e)}class nn{constructor(t,n,r){this.current=t,this.next=n,this.dispose=r}["System.Collections.Generic.IEnumerator`1.get_Current"](){return this.current()}["System.Collections.IEnumerator.get_Current"](){return this.current()}["System.Collections.IEnumerator.MoveNext"](){return this.next()}["System.Collections.IEnumerator.Reset"](){Yt()}Dispose(){this.dispose()}}function rn(e,t,n){return new nn(e,t,n)}function on(e,t,n){let r=!1,o,i=pe(e());const s=()=>{if(i!=null){const f=ue(i);try{n(f)}finally{i=void 0}}},u=()=>{try{s()}finally{o=void 0}};return rn(()=>(r||Qt(),o!=null?ue(o):$t()),()=>{if(r||(r=!0),i!=null){const f=ue(i);let c;try{c=t(f)}catch(l){throw u(),l}return c!=null?(o=c,!0):(u(),!1)}else return!1},s)}function sn(e,t){t==null&&Ht(e)}function un(e){return tn(e)}function _e(e){return sn("source",e),le(e)}function cn(e,t,n){return un(()=>on(e,t,n))}function fn(e,t,n){const r=_e(n);try{let o=t;for(;r["System.Collections.IEnumerator.MoveNext"]();)o=e(o,r["System.Collections.Generic.IEnumerator`1.get_Current"]());return o}finally{r.Dispose()}}function ee(e,t){fn((n,r)=>{e(r)},void 0,t)}function ln(e,t,n){return cn(()=>[_e(t),_e(n)],r=>{const o=r[0],i=r[1];return(o["System.Collections.IEnumerator.MoveNext"]()?i["System.Collections.IEnumerator.MoveNext"]():!1)?pe(e(o["System.Collections.Generic.IEnumerator`1.get_Current"](),i["System.Collections.Generic.IEnumerator`1.get_Current"]())):void 0},r=>{try{r[0].Dispose()}finally{r[1].Dispose()}})}function an(e,t){return ln((n,r)=>[n,r],e,t)}function hn(e,t){setTimeout(t,e)}function He(e){hn(0,e)}class Ue extends at{constructor(t,...n){super();this.tag=t|0,this.fields=n}cases(){return["OnConnected","OnRender"]}}class Ve{constructor(t){this["host@80"]=t,this._firstRun=!0,this._rendering=!1,this._args=[],this._stateIndex=0,this._effectIndex=0,this._states=[],this._effects=[],this._disposables=[]}get host(){return this["host@80"]}fail(){throw new Error("Hooks must be called consistently for each render call")}requestUpdate(){this["host@80"].requestUpdate()}renderWith(t){const n=this;if(n._firstRun?!0:!Vt((r,o)=>Z(r,o),t,n._args))return n._args=t,n.render()}render(){const t=this;t._stateIndex=0,t._effectIndex=0,t._rendering=!0;const n=t["host@80"].renderFn.apply(t["host@80"],t._args);return(t._firstRun?!1:t._stateIndex!==t._states.length?!0:t._effectIndex!==t._effects.length)&&t.fail(),t._rendering=!1,t["host@80"].isConnected&&t.runEffects(t._firstRun,!0),t._firstRun=!1,n}checkRendering(){const t=this;t._rendering||t.fail()}runEffects(t,n){const r=this;He(()=>{ee(o=>{o.tag===0?t&&r._disposables.push(o.fields[0]()):n&&o.fields[0]()},r._effects)})}setState(t,n,r){let o,i;const s=this;o=n,i=s._states[t],!(ct(2,r)==null?Z(i,o):r(i,o))&&(s._states[t]=n,s._rendering?He(()=>{s["host@80"].requestUpdate()}):s["host@80"].requestUpdate())}getState(){const t=this;t._stateIndex>=t._states.length&&t.fail();const n=t._stateIndex|0;return t._stateIndex=n+1|0,[n,t._states[n]]}addState(t){const n=this;return n._states.push(t),[n._states.length-1,t]}disconnect(){const t=this;let n=le(t._disposables);try{for(;n["System.Collections.IEnumerator.MoveNext"]();)n["System.Collections.Generic.IEnumerator`1.get_Current"]().Dispose()}finally{n.Dispose()}ut(t._disposables)}useState(t){const n=this;n.checkRendering();const r=n._firstRun?n.addState(t()):n.getState();return[r[1],o=>{n.setState(r[0],o)}]}useRef(t){const n=this;return n.checkRendering(),n._firstRun?n.addState(new ht(t()))[1]:n.getState()[1]}setEffect(t){const n=this;if(n.checkRendering(),n._firstRun)n._effects.push(t);else{n._effectIndex>=n._effects.length&&n.fail();const r=n._effectIndex|0;n._effectIndex=r+1|0,n._effects[r]=t}}useEffect(t){this.setEffect(new Ue(1,t))}useEffectOnce(t){this.setEffect(new Ue(0,t))}}function gn(e){if(e==null?!0:!(e.hooks instanceof Ve))throw new Error("Cannot access hook context, make sure the hook is called on top of a HookComponent function");return e.hooks}function We(e){return e!=null}function Ge(){throw new Error("LitElement.init must be called on top of the render function")}function pn(e){throw new Error(`'${e}' field in \`props\` record is not of Prop<'T> type`)}class _n{constructor(t,n){this.defaultValue=t,this.options=n}}function wn(e){return[e.defaultValue,e.options]}class mn{constructor(){this._initPromise=null,this._useShadowDom=!0,this._props=null,this._styles=null}get props(){return this._props}set props(t){const n=this;n._props=t}get styles(){return this._styles}set styles(t){const n=this;n._styles=t}get useShadowDom(){return this._useShadowDom}set useShadowDom(t){const n=this;n._useShadowDom=t}init(t){const n=this;return n._initPromise=t(n),[null,null]}get hooks(){return Ge()}}function dn(){return new mn}function Be(e){return e._initPromise}class En extends Je{constructor(t){super();this._hooks=new Ve(this),t(this)}render(){return this._hooks.render()}disconnectedCallback(){const t=this;super.disconnectedCallback(),t._hooks.disconnect()}init(t){const n=this;return[n,n]}get hooks(){return this._hooks}}class Fn extends gt{constructor(t){super();this.name=t}Decorate(t){const n=this,r=dn();if(t.length>0)throw new Error("Render function for LitElement cannot take arguments");try{t.apply(r,[])}catch(i){}return Be(r)==null&&Ge(),Be(r).then(()=>{let i;const s=r,u=We(s.styles)?Kt(s.styles):void 0;let f;if(We(s.props)){const l=[],a={};ee(h=>{const p=h[0];let I;const _=h[1];I=_ instanceof _n?wn(_):pn(p);const d=I[0];a[p]=I[1],d!=null&&l.push([p,d])},(i=Object.values(s.props),an(Object.keys(s.props),i))),f=[pe(a),h=>{ee(p=>{h[p[0]]=p[1]},l)}]}else f=[void 0,l=>{}];const c=class extends En{constructor(){super(f[1])}get renderFn(){return t}};ee(l=>{Object.defineProperty(c,"properties",{get:()=>l})},Te(f[0])),ee(l=>{Object.defineProperty(c,"styles",{get:()=>l})},Te(u)),s.useShadowDom||(c.prototype.createRenderRoot=function(){return this}),customElements.define(n.name,c)}),()=>{throw new Error(`${n.name} is not immediately callable, it must be created in HTML`)}}}function vn(e,t){return e(t.strs,...t.args)}const bn=(()=>{const e=Ke;return t=>vn(e,t)})();function Sn(e){return e.value}function yn(e){throw new Error("A function supposed to be replaced by JS native code has been called, please check.")}yn();new Fn("login-app").Decorate(function(){this.init(n=>(n.useShadowDom=!1,Promise.resolve(void 0)));const e=gn(this).useState(()=>""),t=n=>{let r;const o=e[0].split("@");r=o.length===1?[o[0],"default"]:[o[0],o[1]];let i;const s=document.getElementById(r[1]);i=s==null?document.getElementById("default"):s;const u=i.attributes[0];u.value.indexOf("?")>=0?u.value=u.value+"&":u.value=u.value+"?",u.value=u.value+r[0],i.click()};return bn(qt` -
    -
    {n.key==="Enter"&&t()}}> - -
    - Oceanbox login -
    - {e[1](Sn(n.target))}}> -
    -
    - Next -
    -
    -
    -
    - - `)}); diff --git a/attic/values/dex/templates/dex/static/js/vendor.86e21c29.js b/attic/values/dex/templates/dex/static/js/vendor.86e21c29.js deleted file mode 100644 index ad5c81cb..00000000 --- a/attic/values/dex/templates/dex/static/js/vendor.86e21c29.js +++ /dev/null @@ -1,1393 +0,0 @@ -var Xt=Object.defineProperty,Ze=Object.defineProperties,Je=Object.getOwnPropertyDescriptor,Ye=Object.getOwnPropertyDescriptors,Qt=Object.getOwnPropertySymbols,Ge=Object.prototype.hasOwnProperty,Xe=Object.prototype.propertyIsEnumerable,te=(t,e,r)=>e in t?Xt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,N=(t,e)=>{for(var r in e||(e={}))Ge.call(e,r)&&te(t,r,e[r]);if(Qt)for(var r of Qt(e))Xe.call(e,r)&&te(t,r,e[r]);return t},$t=(t,e)=>Ze(t,Ye(e)),a=(t,e,r,o)=>{for(var i=o>1?void 0:o?Je(e,r):e,s=t.length-1,n;s>=0;s--)(n=t[s])&&(i=(o?n(e,r,i):n(i))||i);return o&&i&&Xt(e,r,i),i},W=new WeakMap,ee=new WeakMap,K=new WeakMap,re=class{constructor(t,e){(this.host=t).addController(this),this.options=N({form:r=>r.closest("form"),name:r=>r.name,value:r=>r.value,defaultValue:r=>r.defaultValue,disabled:r=>{var o;return(o=r.disabled)!=null?o:!1},reportValidity:r=>typeof r.reportValidity=="function"?r.reportValidity():!0,setValue:(r,o)=>r.value=o},e),this.handleFormData=this.handleFormData.bind(this),this.handleFormSubmit=this.handleFormSubmit.bind(this),this.handleFormReset=this.handleFormReset.bind(this),this.reportFormValidity=this.reportFormValidity.bind(this),this.handleUserInput=this.handleUserInput.bind(this)}hostConnected(){this.form=this.options.form(this.host),this.form&&(W.has(this.form)?W.get(this.form).add(this.host):W.set(this.form,new Set([this.host])),this.form.addEventListener("formdata",this.handleFormData),this.form.addEventListener("submit",this.handleFormSubmit),this.form.addEventListener("reset",this.handleFormReset),K.has(this.form)||(K.set(this.form,this.form.reportValidity),this.form.reportValidity=()=>this.reportFormValidity())),this.host.addEventListener("sl-input",this.handleUserInput)}hostDisconnected(){var t;this.form&&((t=W.get(this.form))==null||t.delete(this.host),this.form.removeEventListener("formdata",this.handleFormData),this.form.removeEventListener("submit",this.handleFormSubmit),this.form.removeEventListener("reset",this.handleFormReset),K.has(this.form)&&(this.form.reportValidity=K.get(this.form),K.delete(this.form)),this.form=void 0),this.host.removeEventListener("sl-input",this.handleUserInput)}hostUpdated(){var t;const e=this.host,r=Boolean(ee.get(e)),o=Boolean(e.invalid),i=Boolean(e.required);((t=this.form)==null?void 0:t.noValidate)?(e.removeAttribute("data-required"),e.removeAttribute("data-optional"),e.removeAttribute("data-invalid"),e.removeAttribute("data-valid"),e.removeAttribute("data-user-invalid"),e.removeAttribute("data-user-valid")):(e.toggleAttribute("data-required",i),e.toggleAttribute("data-optional",!i),e.toggleAttribute("data-invalid",o),e.toggleAttribute("data-valid",!o),e.toggleAttribute("data-user-invalid",o&&r),e.toggleAttribute("data-user-valid",!o&&r))}handleFormData(t){const e=this.options.disabled(this.host),r=this.options.name(this.host),o=this.options.value(this.host),i=this.host.tagName.toLowerCase()==="sl-button";!e&&!i&&typeof r=="string"&&r.length>0&&typeof o!="undefined"&&(Array.isArray(o)?o.forEach(s=>{t.formData.append(r,s.toString())}):t.formData.append(r,o.toString()))}handleFormSubmit(t){var e;const r=this.options.disabled(this.host),o=this.options.reportValidity;this.form&&!this.form.noValidate&&((e=W.get(this.form))==null||e.forEach(i=>{this.setUserInteracted(i,!0)})),this.form&&!this.form.noValidate&&!r&&!o(this.host)&&(t.preventDefault(),t.stopImmediatePropagation())}handleFormReset(){this.options.setValue(this.host,this.options.defaultValue(this.host)),this.setUserInteracted(this.host,!1)}async handleUserInput(){await this.host.updateComplete,this.setUserInteracted(this.host,!0)}reportFormValidity(){if(this.form&&!this.form.noValidate){const t=this.form.querySelectorAll("*");for(const e of t)if(typeof e.reportValidity=="function"&&!e.reportValidity())return!1}return!0}setUserInteracted(t,e){ee.set(t,e),t.requestUpdate()}doAction(t,e){if(this.form){const r=document.createElement("button");r.type=t,r.style.position="absolute",r.style.width="0",r.style.height="0",r.style.clipPath="inset(50%)",r.style.overflow="hidden",r.style.whiteSpace="nowrap",e&&(r.name=e.name,r.value=e.value,["formaction","formenctype","formmethod","formnovalidate","formtarget"].forEach(o=>{e.hasAttribute(o)&&r.setAttribute(o,e.getAttribute(o))})),this.form.append(r),r.click(),r.remove()}}reset(t){this.doAction("reset",t)}submit(t){this.doAction("submit",t)}},ut=window,wt=ut.ShadowRoot&&(ut.ShadyCSS===void 0||ut.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,At=Symbol(),oe=new WeakMap,ie=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==At)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(wt&&t===void 0){const r=e!==void 0&&e.length===1;r&&(t=oe.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&oe.set(e,t))}return t}toString(){return this.cssText}},Qe=t=>new ie(typeof t=="string"?t:t+"",void 0,At),T=(t,...e)=>{const r=t.length===1?t[0]:e.reduce((o,i,s)=>o+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new ie(r,t,At)},tr=(t,e)=>{wt?t.adoptedStyleSheets=e.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):e.forEach(r=>{const o=document.createElement("style"),i=ut.litNonce;i!==void 0&&o.setAttribute("nonce",i),o.textContent=r.cssText,t.appendChild(o)})},se=wt?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let r="";for(const o of e.cssRules)r+=o.cssText;return Qe(r)})(t):t,xt,dt=window,ne=dt.trustedTypes,er=ne?ne.emptyScript:"",le=dt.reactiveElementPolyfillSupport,Z={toAttribute(t,e){switch(e){case Boolean:t=t?er:null;break;case Object:case Array:t=t==null?t:JSON.stringify(t)}return t},fromAttribute(t,e){let r=t;switch(e){case Boolean:r=t!==null;break;case Number:r=t===null?null:Number(t);break;case Object:case Array:try{r=JSON.parse(t)}catch(o){r=null}}return r}},ae=(t,e)=>e!==t&&(e==e||t==t),Et={attribute:!0,type:String,converter:Z,reflect:!1,hasChanged:ae},O=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;this.finalize(),((e=this.h)!==null&&e!==void 0?e:this.h=[]).push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach((e,r)=>{const o=this._$Ep(r,e);o!==void 0&&(this._$Ev.set(o,r),t.push(o))}),t}static createProperty(t,e=Et){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const r=typeof t=="symbol"?Symbol():"__"+t,o=this.getPropertyDescriptor(t,r,e);o!==void 0&&Object.defineProperty(this.prototype,t,o)}}static getPropertyDescriptor(t,e,r){return{get(){return this[e]},set(o){const i=this[t];this[e]=o,this.requestUpdate(t,i,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||Et}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,r=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const o of r)this.createProperty(o,e[o])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const r=new Set(t.flat(1/0).reverse());for(const o of r)e.unshift(se(o))}else t!==void 0&&e.push(se(t));return e}static _$Ep(t,e){const r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(e=>e(this))}addController(t){var e,r;((e=this._$ES)!==null&&e!==void 0?e:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((r=t.hostConnected)===null||r===void 0||r.call(t))}removeController(t){var e;(e=this._$ES)===null||e===void 0||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])})}createRenderRoot(){var t;const e=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return tr(e,this.constructor.elementStyles),e}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(e=>{var r;return(r=e.hostConnected)===null||r===void 0?void 0:r.call(e)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(e=>{var r;return(r=e.hostDisconnected)===null||r===void 0?void 0:r.call(e)})}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$EO(t,e,r=Et){var o;const i=this.constructor._$Ep(t,r);if(i!==void 0&&r.reflect===!0){const s=(((o=r.converter)===null||o===void 0?void 0:o.toAttribute)!==void 0?r.converter:Z).toAttribute(e,r.type);this._$El=t,s==null?this.removeAttribute(i):this.setAttribute(i,s),this._$El=null}}_$AK(t,e){var r;const o=this.constructor,i=o._$Ev.get(t);if(i!==void 0&&this._$El!==i){const s=o.getPropertyOptions(i),n=typeof s.converter=="function"?{fromAttribute:s.converter}:((r=s.converter)===null||r===void 0?void 0:r.fromAttribute)!==void 0?s.converter:Z;this._$El=i,this[i]=n.fromAttribute(e,s.type),this._$El=null}}requestUpdate(t,e,r){let o=!0;t!==void 0&&(((r=r||this.constructor.getPropertyOptions(t)).hasChanged||ae)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),r.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,r))):o=!1),!this.isUpdatePending&&o&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((o,i)=>this[i]=o),this._$Ei=void 0);let e=!1;const r=this._$AL;try{e=this.shouldUpdate(r),e?(this.willUpdate(r),(t=this._$ES)===null||t===void 0||t.forEach(o=>{var i;return(i=o.hostUpdate)===null||i===void 0?void 0:i.call(o)}),this.update(r)):this._$Ek()}catch(o){throw e=!1,this._$Ek(),o}e&&this._$AE(r)}willUpdate(t){}_$AE(t){var e;(e=this._$ES)===null||e===void 0||e.forEach(r=>{var o;return(o=r.hostUpdated)===null||o===void 0?void 0:o.call(r)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((e,r)=>this._$EO(r,this[r],e)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};O.finalized=!0,O.elementProperties=new Map,O.elementStyles=[],O.shadowRootOptions={mode:"open"},le==null||le({ReactiveElement:O}),((xt=dt.reactiveElementVersions)!==null&&xt!==void 0?xt:dt.reactiveElementVersions=[]).push("1.4.2");var St,ct=window,L=ct.trustedTypes,ue=L?L.createPolicy("lit-html",{createHTML:t=>t}):void 0,E=`lit$${(Math.random()+"").slice(9)}$`,de="?"+E,rr=`<${de}>`,M=document,J=(t="")=>M.createComment(t),Y=t=>t===null||typeof t!="object"&&typeof t!="function",ce=Array.isArray,or=t=>ce(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",G=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,he=/-->/g,pe=/>/g,z=RegExp(`>|[ -\f\r](?:([^\\s"'>=/]+)([ -\f\r]*=[ -\f\r]*(?:[^ -\f\r"'\`<>=]|("|')|))|$)`,"g"),ve=/'/g,be=/"/g,fe=/^(?:script|style|textarea|title)$/i,ir=t=>(e,...r)=>({_$litType$:t,strings:e,values:r}),x=ir(1),w=Symbol.for("lit-noChange"),m=Symbol.for("lit-nothing"),me=new WeakMap,B=M.createTreeWalker(M,129,null,!1),sr=(t,e)=>{const r=t.length-1,o=[];let i,s=e===2?"":"",n=G;for(let l=0;l"?(n=i!=null?i:G,v=-1):c[1]===void 0?v=-2:(v=n.lastIndex-c[2].length,b=c[1],n=c[3]===void 0?z:c[3]==='"'?be:ve):n===be||n===ve?n=z:n===he||n===pe?n=G:(n=z,i=void 0);const $=n===z&&t[l+1].startsWith("/>")?" ":"";s+=n===G?u+rr:v>=0?(o.push(b),u.slice(0,v)+"$lit$"+u.slice(v)+E+$):u+E+(v===-2?(o.push(void 0),l):$)}const d=s+(t[r]||"")+(e===2?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[ue!==void 0?ue.createHTML(d):d,o]},ht=class{constructor({strings:t,_$litType$:e},r){let o;this.parts=[];let i=0,s=0;const n=t.length-1,d=this.parts,[l,u]=sr(t,e);if(this.el=ht.createElement(l,r),B.currentNode=this.el.content,e===2){const b=this.el.content,c=b.firstChild;c.remove(),b.append(...c.childNodes)}for(;(o=B.nextNode())!==null&&d.length0){o.textContent=L?L.emptyScript:"";for(let v=0;v2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=m}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,r,o){const i=this.strings;let s=!1;if(i===void 0)t=H(this,t,e,0),s=!Y(t)||t!==this._$AH&&t!==w,s&&(this._$AH=t);else{const n=t;let d,l;for(t=i[0],d=0;d{var o,i;const s=(o=r==null?void 0:r.renderBefore)!==null&&o!==void 0?o:e;let n=s._$litPart$;if(n===void 0){const d=(i=r==null?void 0:r.renderBefore)!==null&&i!==void 0?i:null;s._$litPart$=n=new pt(e.insertBefore(J(),d),d,void 0,r!=null?r:{})}return n._$AI(t),n},Ct,kt,X=class extends O{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const r=super.createRenderRoot();return(t=(e=this.renderOptions).renderBefore)!==null&&t!==void 0||(e.renderBefore=r.firstChild),r}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=hr(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),(t=this._$Dt)===null||t===void 0||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),(t=this._$Dt)===null||t===void 0||t.setConnected(!1)}render(){return w}};X.finalized=!0,X._$litElement$=!0,(Ct=globalThis.litElementHydrateSupport)===null||Ct===void 0||Ct.call(globalThis,{LitElement:X});var _e=globalThis.litElementPolyfillSupport;_e==null||_e({LitElement:X});((kt=globalThis.litElementVersions)!==null&&kt!==void 0?kt:globalThis.litElementVersions=[]).push("3.2.0");/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *//** - * @license - * Copyright 2019 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *//** - * @license - * Copyright 2022 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Q=T` - :host { - box-sizing: border-box; - } - - :host *, - :host *::before, - :host *::after { - box-sizing: inherit; - } - - [hidden] { - display: none !important; - } -`,pr=T` - ${Q} - - :host { - display: inline-block; - position: relative; - width: auto; - cursor: pointer; - } - - .button { - display: inline-flex; - align-items: stretch; - justify-content: center; - width: 100%; - border-style: solid; - border-width: var(--sl-input-border-width); - font-family: var(--sl-input-font-family); - font-weight: var(--sl-font-weight-semibold); - text-decoration: none; - user-select: none; - white-space: nowrap; - vertical-align: middle; - padding: 0; - transition: var(--sl-transition-x-fast) background-color, var(--sl-transition-x-fast) color, - var(--sl-transition-x-fast) border, var(--sl-transition-x-fast) box-shadow; - cursor: inherit; - } - - .button::-moz-focus-inner { - border: 0; - } - - .button:focus { - outline: none; - } - - .button:focus-visible { - outline: var(--sl-focus-ring); - outline-offset: var(--sl-focus-ring-offset); - } - - .button--disabled { - opacity: 0.5; - cursor: not-allowed; - } - - /* When disabled, prevent mouse events from bubbling up */ - .button--disabled * { - pointer-events: none; - } - - .button__prefix, - .button__suffix { - flex: 0 0 auto; - display: flex; - align-items: center; - pointer-events: none; - } - - .button__label { - display: inline-block; - } - - .button__label::slotted(sl-icon) { - vertical-align: -2px; - } - - /* - * Standard buttons - */ - - /* Default */ - .button--standard.button--default { - background-color: var(--sl-color-neutral-0); - border-color: var(--sl-color-neutral-300); - color: var(--sl-color-neutral-700); - } - - .button--standard.button--default:hover:not(.button--disabled) { - background-color: var(--sl-color-primary-50); - border-color: var(--sl-color-primary-300); - color: var(--sl-color-primary-700); - } - - .button--standard.button--default:active:not(.button--disabled) { - background-color: var(--sl-color-primary-100); - border-color: var(--sl-color-primary-400); - color: var(--sl-color-primary-700); - } - - /* Primary */ - .button--standard.button--primary { - background-color: var(--sl-color-primary-600); - border-color: var(--sl-color-primary-600); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--primary:hover:not(.button--disabled) { - background-color: var(--sl-color-primary-500); - border-color: var(--sl-color-primary-500); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--primary:active:not(.button--disabled) { - background-color: var(--sl-color-primary-600); - border-color: var(--sl-color-primary-600); - color: var(--sl-color-neutral-0); - } - - /* Success */ - .button--standard.button--success { - background-color: var(--sl-color-success-600); - border-color: var(--sl-color-success-600); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--success:hover:not(.button--disabled) { - background-color: var(--sl-color-success-500); - border-color: var(--sl-color-success-500); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--success:active:not(.button--disabled) { - background-color: var(--sl-color-success-600); - border-color: var(--sl-color-success-600); - color: var(--sl-color-neutral-0); - } - - /* Neutral */ - .button--standard.button--neutral { - background-color: var(--sl-color-neutral-600); - border-color: var(--sl-color-neutral-600); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--neutral:hover:not(.button--disabled) { - background-color: var(--sl-color-neutral-500); - border-color: var(--sl-color-neutral-500); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--neutral:active:not(.button--disabled) { - background-color: var(--sl-color-neutral-600); - border-color: var(--sl-color-neutral-600); - color: var(--sl-color-neutral-0); - } - - /* Warning */ - .button--standard.button--warning { - background-color: var(--sl-color-warning-600); - border-color: var(--sl-color-warning-600); - color: var(--sl-color-neutral-0); - } - .button--standard.button--warning:hover:not(.button--disabled) { - background-color: var(--sl-color-warning-500); - border-color: var(--sl-color-warning-500); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--warning:active:not(.button--disabled) { - background-color: var(--sl-color-warning-600); - border-color: var(--sl-color-warning-600); - color: var(--sl-color-neutral-0); - } - - /* Danger */ - .button--standard.button--danger { - background-color: var(--sl-color-danger-600); - border-color: var(--sl-color-danger-600); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--danger:hover:not(.button--disabled) { - background-color: var(--sl-color-danger-500); - border-color: var(--sl-color-danger-500); - color: var(--sl-color-neutral-0); - } - - .button--standard.button--danger:active:not(.button--disabled) { - background-color: var(--sl-color-danger-600); - border-color: var(--sl-color-danger-600); - color: var(--sl-color-neutral-0); - } - - /* - * Outline buttons - */ - - .button--outline { - background: none; - border: solid 1px; - } - - /* Default */ - .button--outline.button--default { - border-color: var(--sl-color-neutral-300); - color: var(--sl-color-neutral-700); - } - - .button--outline.button--default:hover:not(.button--disabled), - .button--outline.button--default.button--checked:not(.button--disabled) { - border-color: var(--sl-color-primary-600); - background-color: var(--sl-color-primary-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--default:active:not(.button--disabled) { - border-color: var(--sl-color-primary-700); - background-color: var(--sl-color-primary-700); - color: var(--sl-color-neutral-0); - } - - /* Primary */ - .button--outline.button--primary { - border-color: var(--sl-color-primary-600); - color: var(--sl-color-primary-600); - } - - .button--outline.button--primary:hover:not(.button--disabled), - .button--outline.button--primary.button--checked:not(.button--disabled) { - background-color: var(--sl-color-primary-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--primary:active:not(.button--disabled) { - border-color: var(--sl-color-primary-700); - background-color: var(--sl-color-primary-700); - color: var(--sl-color-neutral-0); - } - - /* Success */ - .button--outline.button--success { - border-color: var(--sl-color-success-600); - color: var(--sl-color-success-600); - } - - .button--outline.button--success:hover:not(.button--disabled), - .button--outline.button--success.button--checked:not(.button--disabled) { - background-color: var(--sl-color-success-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--success:active:not(.button--disabled) { - border-color: var(--sl-color-success-700); - background-color: var(--sl-color-success-700); - color: var(--sl-color-neutral-0); - } - - /* Neutral */ - .button--outline.button--neutral { - border-color: var(--sl-color-neutral-600); - color: var(--sl-color-neutral-600); - } - - .button--outline.button--neutral:hover:not(.button--disabled), - .button--outline.button--neutral.button--checked:not(.button--disabled) { - background-color: var(--sl-color-neutral-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--neutral:active:not(.button--disabled) { - border-color: var(--sl-color-neutral-700); - background-color: var(--sl-color-neutral-700); - color: var(--sl-color-neutral-0); - } - - /* Warning */ - .button--outline.button--warning { - border-color: var(--sl-color-warning-600); - color: var(--sl-color-warning-600); - } - - .button--outline.button--warning:hover:not(.button--disabled), - .button--outline.button--warning.button--checked:not(.button--disabled) { - background-color: var(--sl-color-warning-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--warning:active:not(.button--disabled) { - border-color: var(--sl-color-warning-700); - background-color: var(--sl-color-warning-700); - color: var(--sl-color-neutral-0); - } - - /* Danger */ - .button--outline.button--danger { - border-color: var(--sl-color-danger-600); - color: var(--sl-color-danger-600); - } - - .button--outline.button--danger:hover:not(.button--disabled), - .button--outline.button--danger.button--checked:not(.button--disabled) { - background-color: var(--sl-color-danger-600); - color: var(--sl-color-neutral-0); - } - - .button--outline.button--danger:active:not(.button--disabled) { - border-color: var(--sl-color-danger-700); - background-color: var(--sl-color-danger-700); - color: var(--sl-color-neutral-0); - } - - @media (forced-colors: active) { - .button.button--outline.button--checked:not(.button--disabled) { - outline: solid 2px transparent; - } - } - - /* - * Text buttons - */ - - .button--text { - background-color: transparent; - border-color: transparent; - color: var(--sl-color-primary-600); - } - - .button--text:hover:not(.button--disabled) { - background-color: transparent; - border-color: transparent; - color: var(--sl-color-primary-500); - } - - .button--text:focus-visible:not(.button--disabled) { - background-color: transparent; - border-color: transparent; - color: var(--sl-color-primary-500); - } - - .button--text:active:not(.button--disabled) { - background-color: transparent; - border-color: transparent; - color: var(--sl-color-primary-700); - } - - /* - * Size modifiers - */ - - .button--small { - font-size: var(--sl-button-font-size-small); - height: var(--sl-input-height-small); - line-height: calc(var(--sl-input-height-small) - var(--sl-input-border-width) * 2); - border-radius: var(--sl-input-border-radius-small); - } - - .button--medium { - font-size: var(--sl-button-font-size-medium); - height: var(--sl-input-height-medium); - line-height: calc(var(--sl-input-height-medium) - var(--sl-input-border-width) * 2); - border-radius: var(--sl-input-border-radius-medium); - } - - .button--large { - font-size: var(--sl-button-font-size-large); - height: var(--sl-input-height-large); - line-height: calc(var(--sl-input-height-large) - var(--sl-input-border-width) * 2); - border-radius: var(--sl-input-border-radius-large); - } - - /* - * Pill modifier - */ - - .button--pill.button--small { - border-radius: var(--sl-input-height-small); - } - - .button--pill.button--medium { - border-radius: var(--sl-input-height-medium); - } - - .button--pill.button--large { - border-radius: var(--sl-input-height-large); - } - - /* - * Circle modifier - */ - - .button--circle { - padding-left: 0; - padding-right: 0; - } - - .button--circle.button--small { - width: var(--sl-input-height-small); - border-radius: 50%; - } - - .button--circle.button--medium { - width: var(--sl-input-height-medium); - border-radius: 50%; - } - - .button--circle.button--large { - width: var(--sl-input-height-large); - border-radius: 50%; - } - - .button--circle .button__prefix, - .button--circle .button__suffix, - .button--circle .button__caret { - display: none; - } - - /* - * Caret modifier - */ - - .button--caret .button__suffix { - display: none; - } - - .button--caret .button__caret { - height: auto; - } - - /* - * Loading modifier - */ - - .button--loading { - position: relative; - cursor: wait; - } - - .button--loading .button__prefix, - .button--loading .button__label, - .button--loading .button__suffix, - .button--loading .button__caret { - visibility: hidden; - } - - .button--loading sl-spinner { - --indicator-color: currentColor; - position: absolute; - font-size: 1em; - height: 1em; - width: 1em; - top: calc(50% - 0.5em); - left: calc(50% - 0.5em); - } - - /* - * Badges - */ - - .button ::slotted(sl-badge) { - position: absolute; - top: 0; - right: 0; - translate: 50% -50%; - pointer-events: none; - } - - .button--rtl ::slotted(sl-badge) { - right: auto; - left: 0; - translate: -50% -50%; - } - - /* - * Button spacing - */ - - .button--has-label.button--small .button__label { - padding: 0 var(--sl-spacing-small); - } - - .button--has-label.button--medium .button__label { - padding: 0 var(--sl-spacing-medium); - } - - .button--has-label.button--large .button__label { - padding: 0 var(--sl-spacing-large); - } - - .button--has-prefix.button--small { - padding-inline-start: var(--sl-spacing-x-small); - } - - .button--has-prefix.button--small .button__label { - padding-inline-start: var(--sl-spacing-x-small); - } - - .button--has-prefix.button--medium { - padding-inline-start: var(--sl-spacing-small); - } - - .button--has-prefix.button--medium .button__label { - padding-inline-start: var(--sl-spacing-small); - } - - .button--has-prefix.button--large { - padding-inline-start: var(--sl-spacing-small); - } - - .button--has-prefix.button--large .button__label { - padding-inline-start: var(--sl-spacing-small); - } - - .button--has-suffix.button--small, - .button--caret.button--small { - padding-inline-end: var(--sl-spacing-x-small); - } - - .button--has-suffix.button--small .button__label, - .button--caret.button--small .button__label { - padding-inline-end: var(--sl-spacing-x-small); - } - - .button--has-suffix.button--medium, - .button--caret.button--medium { - padding-inline-end: var(--sl-spacing-small); - } - - .button--has-suffix.button--medium .button__label, - .button--caret.button--medium .button__label { - padding-inline-end: var(--sl-spacing-small); - } - - .button--has-suffix.button--large, - .button--caret.button--large { - padding-inline-end: var(--sl-spacing-small); - } - - .button--has-suffix.button--large .button__label, - .button--caret.button--large .button__label { - padding-inline-end: var(--sl-spacing-small); - } - - /* - * Button groups support a variety of button types (e.g. buttons with tooltips, buttons as dropdown triggers, etc.). - * This means buttons aren't always direct descendants of the button group, thus we can't target them with the - * ::slotted selector. To work around this, the button group component does some magic to add these special classes to - * buttons and we style them here instead. - */ - - :host(.sl-button-group__button--first:not(.sl-button-group__button--last)) .button { - border-start-end-radius: 0; - border-end-end-radius: 0; - } - - :host(.sl-button-group__button--inner) .button { - border-radius: 0; - } - - :host(.sl-button-group__button--last:not(.sl-button-group__button--first)) .button { - border-start-start-radius: 0; - border-end-start-radius: 0; - } - - /* All except the first */ - :host(.sl-button-group__button:not(.sl-button-group__button--first)) { - margin-inline-start: calc(-1 * var(--sl-input-border-width)); - } - - /* Add a visual separator between solid buttons */ - :host(.sl-button-group__button:not(.sl-button-group__button--first, .sl-button-group__button--radio, [variant='default']):not(:hover)) - .button:after { - content: ''; - position: absolute; - top: 0; - inset-inline-start: 0; - bottom: 0; - border-left: solid 1px rgb(128 128 128 / 33%); - mix-blend-mode: multiply; - } - - /* Bump hovered, focused, and checked buttons up so their focus ring isn't clipped */ - :host(.sl-button-group__button--hover) { - z-index: 1; - } - - /* Focus and checked are always on top */ - :host(.sl-button-group__button--focus), - :host(.sl-button-group__button[checked]) { - z-index: 2; - } -`,ye=Symbol.for(""),vr=t=>{if((t==null?void 0:t.r)===ye)return t==null?void 0:t._$litStatic$},$e=(t,...e)=>({_$litStatic$:e.reduce((r,o,i)=>r+(s=>{if(s._$litStatic$!==void 0)return s._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${s}. Use 'unsafeStatic' to pass non-literal values, but - take care to ensure page security.`)})(o)+t[i+1],t[0]),r:ye}),we=new Map,br=t=>(e,...r)=>{const o=r.length;let i,s;const n=[],d=[];let l,u=0,b=!1;for(;u{const r=e.$code.toLowerCase();R.has(r)?R.set(r,Object.assign(Object.assign({},R.get(r)),e)):R.set(r,e),tt||(tt=e)}),Ee()}function Ee(){Ae=document.documentElement.dir||"ltr",xe=document.documentElement.lang||navigator.language,[...zt.keys()].map(t=>{typeof t.requestUpdate=="function"&&t.requestUpdate()})}var gr=class{constructor(t){this.host=t,this.host.addController(this)}hostConnected(){zt.add(this.host)}hostDisconnected(){zt.delete(this.host)}dir(){return`${this.host.dir||Ae}`.toLowerCase()}lang(){return`${this.host.lang||xe}`.toLowerCase()}term(t,...e){var r,o;const i=new Intl.Locale(this.lang()),s=i==null?void 0:i.language.toLowerCase(),n=(o=(r=i==null?void 0:i.region)===null||r===void 0?void 0:r.toLowerCase())!==null&&o!==void 0?o:"",d=R.get(`${s}-${n}`),l=R.get(s);let u;if(d&&d[t])u=d[t];else if(l&&l[t])u=l[t];else if(tt&&tt[t])u=tt[t];else return console.error(`No translation found for: ${String(t)}`),String(t);return typeof u=="function"?u(...e):u}date(t,e){return t=new Date(t),new Intl.DateTimeFormat(this.lang(),e).format(t)}number(t,e){return t=Number(t),isNaN(t)?"":new Intl.NumberFormat(this.lang(),e).format(t)}relativeTime(t,e,r){return new Intl.RelativeTimeFormat(this.lang(),r).format(t,e)}},Pt=class extends gr{},_r={$code:"en",$name:"English",$dir:"ltr",clearEntry:"Clear entry",close:"Close",copy:"Copy",numOptionsSelected:t=>t===0?"No options selected":t===1?"1 option selected":`${t} options selected`,currentValue:"Current value",hidePassword:"Hide password",loading:"Loading",progress:"Progress",remove:"Remove",resize:"Resize",scrollToEnd:"Scroll to end",scrollToStart:"Scroll to start",selectAColorFromTheScreen:"Select a color from the screen",showPassword:"Show password",toggleColorFormat:"Toggle color format"};mr(_r);var Ut=class{constructor(t,...e){this.slotNames=[],(this.host=t).addController(this),this.slotNames=e,this.handleSlotChange=this.handleSlotChange.bind(this)}hasDefaultSlot(){return[...this.host.childNodes].some(t=>{if(t.nodeType===t.TEXT_NODE&&t.textContent.trim()!=="")return!0;if(t.nodeType===t.ELEMENT_NODE){const e=t;if(e.tagName.toLowerCase()==="sl-visually-hidden")return!1;if(!e.hasAttribute("slot"))return!0}return!1})}hasNamedSlot(t){return this.host.querySelector(`:scope > [slot="${t}"]`)!==null}test(t){return t==="[default]"?this.hasDefaultSlot():this.hasNamedSlot(t)}hostConnected(){this.host.shadowRoot.addEventListener("slotchange",this.handleSlotChange)}hostDisconnected(){this.host.shadowRoot.removeEventListener("slotchange",this.handleSlotChange)}handleSlotChange(t){const e=t.target;(this.slotNames.includes("[default]")&&!e.name||e.name&&this.slotNames.includes(e.name))&&this.host.requestUpdate()}},g=t=>t!=null?t:m;/** - * @license - * Copyright 2018 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var S={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Nt=t=>(...e)=>({_$litDirective$:t,values:e}),Ot=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,r){this._$Ct=t,this._$AM=e,this._$Ci=r}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var bt=Nt(class extends Ot{constructor(t){var e;if(super(t),t.type!==S.ATTRIBUTE||t.name!=="class"||((e=t.strings)===null||e===void 0?void 0:e.length)>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(t){return" "+Object.keys(t).filter(e=>t[e]).join(" ")+" "}update(t,[e]){var r,o;if(this.nt===void 0){this.nt=new Set,t.strings!==void 0&&(this.st=new Set(t.strings.join(" ").split(/\s/).filter(s=>s!=="")));for(const s in e)e[s]&&!((r=this.st)===null||r===void 0?void 0:r.has(s))&&this.nt.add(s);return this.render(e)}const i=t.element.classList;this.nt.forEach(s=>{s in e||(i.remove(s),this.nt.delete(s))});for(const s in e){const n=!!e[s];n===this.nt.has(s)||((o=this.st)===null||o===void 0?void 0:o.has(s))||(n?(i.add(s),this.nt.add(s)):(i.remove(s),this.nt.delete(s)))}return w}});/** - * @license - * Copyright 2018 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */function C(t,e){const r=N({waitUntilFirstUpdate:!1},e);return(o,i)=>{const{update:s}=o;if(t in o){const n=t;o.update=function(d){if(d.has(n)){const l=d.get(n),u=this[n];l!==u&&(!r.waitUntilFirstUpdate||this.hasUpdated)&&this[i](l,u)}s.call(this,d)}}}}var et=t=>e=>typeof e=="function"?((r,o)=>(customElements.define(r,o),o))(t,e):((r,o)=>{const{kind:i,elements:s}=o;return{kind:i,elements:s,finisher(n){customElements.define(r,n)}}})(t,e),yr=(t,e)=>e.kind==="method"&&e.descriptor&&!("value"in e.descriptor)?$t(N({},e),{finisher(r){r.createProperty(e.key,t)}}):{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){typeof e.initializer=="function"&&(this[e.key]=e.initializer.call(this))},finisher(r){r.createProperty(e.key,t)}};function h(t){return(e,r)=>r!==void 0?((o,i,s)=>{i.constructor.createProperty(s,o)})(t,e,r):yr(t,e)}function rt(t){return h($t(N({},t),{state:!0}))}var $r=({finisher:t,descriptor:e})=>(r,o)=>{var i;if(o===void 0){const s=(i=r.originalKey)!==null&&i!==void 0?i:r.key,n=e!=null?{kind:"method",placement:"prototype",key:s,descriptor:e(r.key)}:$t(N({},r),{key:s});return t!=null&&(n.finisher=function(d){t(d,s)}),n}{const s=r.constructor;e!==void 0&&Object.defineProperty(r,o,e(o)),t==null||t(s,o)}};function Se(t,e){return $r({descriptor:r=>{const o={get(){var i,s;return(s=(i=this.renderRoot)===null||i===void 0?void 0:i.querySelector(t))!==null&&s!==void 0?s:null},enumerable:!0,configurable:!0};if(e){const i=typeof r=="symbol"?Symbol():"__"+r;o.get=function(){var s,n;return this[i]===void 0&&(this[i]=(n=(s=this.renderRoot)===null||s===void 0?void 0:s.querySelector(t))!==null&&n!==void 0?n:null),this[i]}}return o}})}var Lt;((Lt=window.HTMLSlotElement)===null||Lt===void 0?void 0:Lt.prototype.assignedElements)!=null;var P=class extends X{emit(t,e){const r=new CustomEvent(t,N({bubbles:!0,cancelable:!1,composed:!0,detail:{}},e));return this.dispatchEvent(r),r}};a([h()],P.prototype,"dir",2);a([h()],P.prototype,"lang",2);/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *//** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var f=class extends P{constructor(){super(...arguments);this.formSubmitController=new re(this,{form:t=>{if(t.hasAttribute("form")){const e=t.getRootNode(),r=t.getAttribute("form");return e.getElementById(r)}return t.closest("form")}}),this.hasSlotController=new Ut(this,"[default]","prefix","suffix"),this.localize=new Pt(this),this.hasFocus=!1,this.invalid=!1,this.title="",this.variant="default",this.size="medium",this.caret=!1,this.disabled=!1,this.loading=!1,this.outline=!1,this.pill=!1,this.circle=!1,this.type="button",this.name="",this.value="",this.href=""}firstUpdated(){this.isButton()&&(this.invalid=!this.button.checkValidity())}handleBlur(){this.hasFocus=!1,this.emit("sl-blur")}handleFocus(){this.hasFocus=!0,this.emit("sl-focus")}handleClick(t){if(this.disabled||this.loading){t.preventDefault(),t.stopPropagation();return}this.type==="submit"&&this.formSubmitController.submit(this),this.type==="reset"&&this.formSubmitController.reset(this)}isButton(){return!this.href}isLink(){return!!this.href}handleDisabledChange(){this.isButton()&&(this.button.disabled=this.disabled,this.invalid=!this.button.checkValidity())}click(){this.button.click()}focus(t){this.button.focus(t)}blur(){this.button.blur()}checkValidity(){return this.isButton()?this.button.checkValidity():!0}reportValidity(){return this.isButton()?this.button.reportValidity():!0}setCustomValidity(t){this.isButton()&&(this.button.setCustomValidity(t),this.invalid=!this.button.checkValidity())}render(){const t=this.isLink(),e=t?$e`a`:$e`button`;return Tt` - <${e} - part="base" - class=${bt({button:!0,"button--default":this.variant==="default","button--primary":this.variant==="primary","button--success":this.variant==="success","button--neutral":this.variant==="neutral","button--warning":this.variant==="warning","button--danger":this.variant==="danger","button--text":this.variant==="text","button--small":this.size==="small","button--medium":this.size==="medium","button--large":this.size==="large","button--caret":this.caret,"button--circle":this.circle,"button--disabled":this.disabled,"button--focused":this.hasFocus,"button--loading":this.loading,"button--standard":!this.outline,"button--outline":this.outline,"button--pill":this.pill,"button--rtl":this.localize.dir()==="rtl","button--has-label":this.hasSlotController.test("[default]"),"button--has-prefix":this.hasSlotController.test("prefix"),"button--has-suffix":this.hasSlotController.test("suffix")})} - ?disabled=${g(t?void 0:this.disabled)} - type=${g(t?void 0:this.type)} - title=${this.title} - name=${g(t?void 0:this.name)} - value=${g(t?void 0:this.value)} - href=${g(t?this.href:void 0)} - target=${g(t?this.target:void 0)} - download=${g(t?this.download:void 0)} - rel=${g(t&&this.target?"noreferrer noopener":void 0)} - role=${g(t?void 0:"button")} - aria-disabled=${this.disabled?"true":"false"} - tabindex=${this.disabled?"-1":"0"} - @blur=${this.handleBlur} - @focus=${this.handleFocus} - @click=${this.handleClick} - > - - - - ${this.caret?Tt` `:""} - ${this.loading?Tt``:""} - - `}};f.styles=pr;a([Se(".button")],f.prototype,"button",2);a([rt()],f.prototype,"hasFocus",2);a([rt()],f.prototype,"invalid",2);a([h()],f.prototype,"title",2);a([h({reflect:!0})],f.prototype,"variant",2);a([h({reflect:!0})],f.prototype,"size",2);a([h({type:Boolean,reflect:!0})],f.prototype,"caret",2);a([h({type:Boolean,reflect:!0})],f.prototype,"disabled",2);a([h({type:Boolean,reflect:!0})],f.prototype,"loading",2);a([h({type:Boolean,reflect:!0})],f.prototype,"outline",2);a([h({type:Boolean,reflect:!0})],f.prototype,"pill",2);a([h({type:Boolean,reflect:!0})],f.prototype,"circle",2);a([h()],f.prototype,"type",2);a([h()],f.prototype,"name",2);a([h()],f.prototype,"value",2);a([h()],f.prototype,"href",2);a([h()],f.prototype,"target",2);a([h()],f.prototype,"download",2);a([h()],f.prototype,"form",2);a([h({attribute:"formaction"})],f.prototype,"formAction",2);a([h({attribute:"formenctype"})],f.prototype,"formEnctype",2);a([h({attribute:"formmethod"})],f.prototype,"formMethod",2);a([h({attribute:"formnovalidate",type:Boolean})],f.prototype,"formNoValidate",2);a([h({attribute:"formtarget"})],f.prototype,"formTarget",2);a([C("disabled",{waitUntilFirstUpdate:!0})],f.prototype,"handleDisabledChange",1);f=a([et("sl-button")],f);var wr=T` - ${Q} - - :host { - --track-width: 2px; - --track-color: rgb(128 128 128 / 25%); - --indicator-color: var(--sl-color-primary-600); - --speed: 2s; - - display: inline-flex; - width: 1em; - height: 1em; - } - - .spinner { - flex: 1 1 auto; - height: 100%; - width: 100%; - } - - .spinner__track, - .spinner__indicator { - fill: none; - stroke-width: var(--track-width); - r: calc(0.5em - var(--track-width) / 2); - cx: 0.5em; - cy: 0.5em; - transform-origin: 50% 50%; - } - - .spinner__track { - stroke: var(--track-color); - transform-origin: 0% 0%; - mix-blend-mode: multiply; - } - - .spinner__indicator { - stroke: var(--indicator-color); - stroke-linecap: round; - stroke-dasharray: 150% 75%; - animation: spin var(--speed) linear infinite; - } - - @keyframes spin { - 0% { - rotate: 0deg; - stroke-dasharray: 0.01em, 2.75em; - } - - 50% { - rotate: 450deg; - stroke-dasharray: 1.375em, 1.375em; - } - - 100% { - rotate: 1080deg; - stroke-dasharray: 0.01em, 2.75em; - } - } -`,Mt=class extends P{constructor(){super(...arguments);this.localize=new Pt(this)}render(){return x` - - - - - `}};Mt.styles=wr;Mt=a([et("sl-spinner")],Mt);var Bt="";function Ce(t){Bt=t}function Ar(){if(!Bt){const t=[...document.getElementsByTagName("script")],e=t.find(r=>r.hasAttribute("data-shoelace"));if(e)Ce(e.getAttribute("data-shoelace"));else{const r=t.find(i=>/shoelace(\.min)?\.js($|\?)/.test(i.src));let o="";r&&(o=r.getAttribute("src")),Ce(o.split("/").slice(0,-1).join("/"))}}return Bt.replace(/\/$/,"")}var xr={name:"default",resolver:t=>`${Ar()}/assets/icons/${t}.svg`},Er=xr,ke={caret:` - - - - `,check:` - - - - - - - - - - - `,"chevron-down":` - - - - `,"chevron-left":` - - - - `,"chevron-right":` - - - - `,eye:` - - - - - `,"eye-slash":` - - - - - - `,eyedropper:` - - - - `,"grip-vertical":` - - - - `,indeterminate:` - - - - - - - - - - `,"person-fill":` - - - - `,"play-fill":` - - - - `,"pause-fill":` - - - - `,radio:` - - - - - - - - `,"star-fill":` - - - - `,"x-lg":` - - - - `,"x-circle-fill":` - - - - `},Sr={name:"system",resolver:t=>t in ke?`data:image/svg+xml,${encodeURIComponent(ke[t])}`:""},Cr=Sr,kr=[Er,Cr],Ht=[];function Tr(t){Ht.push(t)}function zr(t){Ht=Ht.filter(e=>e!==t)}function Te(t){return kr.find(e=>e.name===t)}var Rt=new Map;function Pr(t,e="cors"){if(Rt.has(t))return Rt.get(t);const r=fetch(t,{mode:e}).then(async o=>({ok:o.ok,status:o.status,html:await o.text()}));return Rt.set(t,r),r}var Vt=new Map;async function Ur(t){if(Vt.has(t))return Vt.get(t);const e=await Pr(t),r={ok:e.ok,status:e.status,svg:null};if(e.ok){const o=document.createElement("div");o.innerHTML=e.html;const i=o.firstElementChild;r.svg=(i==null?void 0:i.tagName.toLowerCase())==="svg"?i.outerHTML:""}return Vt.set(t,r),r}var Nr=T` - ${Q} - - :host { - display: inline-block; - width: 1em; - height: 1em; - contain: strict; - box-sizing: content-box !important; - } - - svg { - display: block; - height: 100%; - width: 100%; - } -`,Dt=class extends Ot{constructor(t){if(super(t),this.it=m,t.type!==S.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===m||t==null)return this._t=void 0,this.it=t;if(t===w)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;const e=[t];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};Dt.directiveName="unsafeHTML",Dt.resultType=1;var It=class extends Dt{};It.directiveName="unsafeSVG",It.resultType=2;var Or=Nt(It),Ft,A=class extends P{constructor(){super(...arguments);this.svg="",this.label="",this.library="default"}connectedCallback(){super.connectedCallback(),Tr(this)}firstUpdated(){this.setIcon()}disconnectedCallback(){super.disconnectedCallback(),zr(this)}getUrl(){const t=Te(this.library);return this.name&&t?t.resolver(this.name):this.src}handleLabelChange(){typeof this.label=="string"&&this.label.length>0?(this.setAttribute("role","img"),this.setAttribute("aria-label",this.label),this.removeAttribute("aria-hidden")):(this.removeAttribute("role"),this.removeAttribute("aria-label"),this.setAttribute("aria-hidden","true"))}async setIcon(){var t;const e=Te(this.library),r=this.getUrl();if(Ft||(Ft=new DOMParser),r)try{const o=await Ur(r);if(r!==this.getUrl())return;if(o.ok){const s=Ft.parseFromString(o.svg,"text/html").body.querySelector("svg");s!==null?((t=e==null?void 0:e.mutator)==null||t.call(e,s),this.svg=s.outerHTML,this.emit("sl-load")):(this.svg="",this.emit("sl-error"))}else this.svg="",this.emit("sl-error")}catch(o){this.emit("sl-error")}else this.svg.length>0&&(this.svg="")}render(){return x` ${Or(this.svg)} `}};A.styles=Nr;a([rt()],A.prototype,"svg",2);a([h({reflect:!0})],A.prototype,"name",2);a([h()],A.prototype,"src",2);a([h()],A.prototype,"label",2);a([h({reflect:!0})],A.prototype,"library",2);a([C("label")],A.prototype,"handleLabelChange",1);a([C("name"),C("src"),C("library")],A.prototype,"setIcon",1);A=a([et("sl-icon")],A);/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Lr=T` - .form-control .form-control__label { - display: none; - } - - .form-control .form-control__help-text { - display: none; - } - - /* Label */ - .form-control--has-label .form-control__label { - display: inline-block; - color: var(--sl-input-label-color); - margin-bottom: var(--sl-spacing-3x-small); - } - - .form-control--has-label.form-control--small .form-control__label { - font-size: var(--sl-input-label-font-size-small); - } - - .form-control--has-label.form-control--medium .form-control__label { - font-size: var(--sl-input-label-font-size-medium); - } - - .form-control--has-label.form-control--large .form-control_label { - font-size: var(--sl-input-label-font-size-large); - } - - :host([required]) .form-control--has-label .form-control__label::after { - content: var(--sl-input-required-content); - margin-inline-start: var(--sl-input-required-content-offset); - color: var(--sl-input-required-content-color); - } - - /* Help text */ - .form-control--has-help-text .form-control__help-text { - display: block; - color: var(--sl-input-help-text-color); - margin-top: var(--sl-spacing-3x-small); - } - - .form-control--has-help-text.form-control--small .form-control__help-text { - font-size: var(--sl-input-help-text-font-size-small); - } - - .form-control--has-help-text.form-control--medium .form-control__help-text { - font-size: var(--sl-input-help-text-font-size-medium); - } - - .form-control--has-help-text.form-control--large .form-control__help-text { - font-size: var(--sl-input-help-text-font-size-large); - } - - .form-control--has-help-text.form-control--radio-group .form-control__help-text { - margin-top: var(--sl-spacing-2x-small); - } -`,Mr=T` - ${Q} - ${Lr} - - :host { - display: block; - } - - .input { - flex: 1 1 auto; - display: inline-flex; - align-items: stretch; - justify-content: start; - position: relative; - width: 100%; - font-family: var(--sl-input-font-family); - font-weight: var(--sl-input-font-weight); - letter-spacing: var(--sl-input-letter-spacing); - vertical-align: middle; - overflow: hidden; - cursor: text; - transition: var(--sl-transition-fast) color, var(--sl-transition-fast) border, var(--sl-transition-fast) box-shadow, - var(--sl-transition-fast) background-color; - } - - /* Standard inputs */ - .input--standard { - background-color: var(--sl-input-background-color); - border: solid var(--sl-input-border-width) var(--sl-input-border-color); - } - - .input--standard:hover:not(.input--disabled) { - background-color: var(--sl-input-background-color-hover); - border-color: var(--sl-input-border-color-hover); - } - - .input--standard.input--focused:not(.input--disabled) { - background-color: var(--sl-input-background-color-focus); - border-color: var(--sl-input-border-color-focus); - box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-input-focus-ring-color); - } - - .input--standard.input--focused:not(.input--disabled) .input__control { - color: var(--sl-input-color-focus); - } - - .input--standard.input--disabled { - background-color: var(--sl-input-background-color-disabled); - border-color: var(--sl-input-border-color-disabled); - opacity: 0.5; - cursor: not-allowed; - } - - .input--standard.input--disabled .input__control { - color: var(--sl-input-color-disabled); - } - - .input--standard.input--disabled .input__control::placeholder { - color: var(--sl-input-placeholder-color-disabled); - } - - /* Filled inputs */ - .input--filled { - border: none; - background-color: var(--sl-input-filled-background-color); - color: var(--sl-input-color); - } - - .input--filled:hover:not(.input--disabled) { - background-color: var(--sl-input-filled-background-color-hover); - } - - .input--filled.input--focused:not(.input--disabled) { - background-color: var(--sl-input-filled-background-color-focus); - outline: var(--sl-focus-ring); - outline-offset: var(--sl-focus-ring-offset); - } - - .input--filled.input--disabled { - background-color: var(--sl-input-filled-background-color-disabled); - opacity: 0.5; - cursor: not-allowed; - } - - .input__control { - flex: 1 1 auto; - font-family: inherit; - font-size: inherit; - font-weight: inherit; - min-width: 0; - height: 100%; - color: var(--sl-input-color); - border: none; - background: none; - box-shadow: none; - padding: 0; - margin: 0; - cursor: inherit; - -webkit-appearance: none; - } - - .input__control::-webkit-search-decoration, - .input__control::-webkit-search-cancel-button, - .input__control::-webkit-search-results-button, - .input__control::-webkit-search-results-decoration { - -webkit-appearance: none; - } - - .input__control:-webkit-autofill, - .input__control:-webkit-autofill:hover, - .input__control:-webkit-autofill:focus, - .input__control:-webkit-autofill:active { - box-shadow: 0 0 0 var(--sl-input-height-large) var(--sl-input-background-color-hover) inset !important; - -webkit-text-fill-color: var(--sl-color-primary-500); - caret-color: var(--sl-input-color); - } - - .input--filled .input__control:-webkit-autofill, - .input--filled .input__control:-webkit-autofill:hover, - .input--filled .input__control:-webkit-autofill:focus, - .input--filled .input__control:-webkit-autofill:active { - box-shadow: 0 0 0 var(--sl-input-height-large) var(--sl-input-filled-background-color) inset !important; - } - - .input__control::placeholder { - color: var(--sl-input-placeholder-color); - user-select: none; - } - - .input:hover:not(.input--disabled) .input__control { - color: var(--sl-input-color-hover); - } - - .input__control:focus { - outline: none; - } - - .input__prefix, - .input__suffix { - display: inline-flex; - flex: 0 0 auto; - align-items: center; - cursor: default; - } - - .input__prefix::slotted(sl-icon), - .input__suffix::slotted(sl-icon) { - color: var(--sl-input-icon-color); - } - - /* - * Size modifiers - */ - - .input--small { - border-radius: var(--sl-input-border-radius-small); - font-size: var(--sl-input-font-size-small); - height: var(--sl-input-height-small); - } - - .input--small .input__control { - height: calc(var(--sl-input-height-small) - var(--sl-input-border-width) * 2); - padding: 0 var(--sl-input-spacing-small); - } - - .input--small .input__clear, - .input--small .input__password-toggle { - width: calc(1em + var(--sl-input-spacing-small) * 2); - } - - .input--small .input__prefix::slotted(*) { - margin-inline-start: var(--sl-input-spacing-small); - } - - .input--small .input__suffix::slotted(*) { - margin-inline-end: var(--sl-input-spacing-small); - } - - .input--medium { - border-radius: var(--sl-input-border-radius-medium); - font-size: var(--sl-input-font-size-medium); - height: var(--sl-input-height-medium); - } - - .input--medium .input__control { - height: calc(var(--sl-input-height-medium) - var(--sl-input-border-width) * 2); - padding: 0 var(--sl-input-spacing-medium); - } - - .input--medium .input__clear, - .input--medium .input__password-toggle { - width: calc(1em + var(--sl-input-spacing-medium) * 2); - } - - .input--medium .input__prefix::slotted(*) { - margin-inline-start: var(--sl-input-spacing-medium); - } - - .input--medium .input__suffix::slotted(*) { - margin-inline-end: var(--sl-input-spacing-medium); - } - - .input--large { - border-radius: var(--sl-input-border-radius-large); - font-size: var(--sl-input-font-size-large); - height: var(--sl-input-height-large); - } - - .input--large .input__control { - height: calc(var(--sl-input-height-large) - var(--sl-input-border-width) * 2); - padding: 0 var(--sl-input-spacing-large); - } - - .input--large .input__clear, - .input--large .input__password-toggle { - width: calc(1em + var(--sl-input-spacing-large) * 2); - } - - .input--large .input__prefix::slotted(*) { - margin-inline-start: var(--sl-input-spacing-large); - } - - .input--large .input__suffix::slotted(*) { - margin-inline-end: var(--sl-input-spacing-large); - } - - /* - * Pill modifier - */ - - .input--pill.input--small { - border-radius: var(--sl-input-height-small); - } - - .input--pill.input--medium { - border-radius: var(--sl-input-height-medium); - } - - .input--pill.input--large { - border-radius: var(--sl-input-height-large); - } - - /* - * Clearable + Password Toggle - */ - - .input__clear, - .input__password-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - font-size: inherit; - color: var(--sl-input-icon-color); - border: none; - background: none; - padding: 0; - transition: var(--sl-transition-fast) color; - cursor: pointer; - } - - .input__clear:hover, - .input__password-toggle:hover { - color: var(--sl-input-icon-color-hover); - } - - .input__clear:focus, - .input__password-toggle:focus { - outline: none; - } - - .input--empty .input__clear { - visibility: hidden; - } - - /* Don't show the browser's password toggle in Edge */ - ::-ms-reveal { - display: none; - } - - /* Hide Firefox's clear button on date and time inputs */ - .input--is-firefox input[type='date'], - .input--is-firefox input[type='time'] { - clip-path: inset(0 2em 0 0); - } - - /* Hide the built-in number spinner */ - .input--no-spin-buttons input[type='number']::-webkit-outer-spin-button, - .input--no-spin-buttons input[type='number']::-webkit-inner-spin-button { - -webkit-appearance: none; - display: none; - } - - .input--no-spin-buttons input[type='number'] { - -moz-appearance: textfield; - } -`,Br=t=>t.strings===void 0,Hr={},Rr=(t,e=Hr)=>t._$AH=e,Vr=Nt(class extends Ot{constructor(t){if(super(t),t.type!==S.PROPERTY&&t.type!==S.ATTRIBUTE&&t.type!==S.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Br(t))throw Error("`live` bindings can only contain a single expression")}render(t){return t}update(t,[e]){if(e===w||e===m)return e;const r=t.element,o=t.name;if(t.type===S.PROPERTY){if(e===r[o])return w}else if(t.type===S.BOOLEAN_ATTRIBUTE){if(!!e===r.hasAttribute(o))return w}else if(t.type===S.ATTRIBUTE&&r.getAttribute(o)===e+"")return w;return Rr(t),e}});/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Dr=(t="value")=>(e,r)=>{const o=e.constructor,i=o.prototype.attributeChangedCallback;o.prototype.attributeChangedCallback=function(s,n,d){var l;const u=o.getPropertyOptions(t),b=typeof u.attribute=="string"?u.attribute:t;if(s===b){const c=u.converter||Z,_=(typeof c=="function"?c:(l=c==null?void 0:c.fromAttribute)!=null?l:Z.fromAttribute)(d,u.type);this[t]!==_&&(this[r]=_)}i.call(this,s,n,d)}},ze,Ir=(ze=navigator.userAgentData)==null?void 0:ze.brands.some(t=>t.brand.includes("Chromium")),Fr=Ir?!1:navigator.userAgent.includes("Firefox"),p=class extends P{constructor(){super(...arguments);this.formSubmitController=new re(this),this.hasSlotController=new Ut(this,"help-text","label"),this.localize=new Pt(this),this.hasFocus=!1,this.invalid=!1,this.title="",this.type="text",this.name="",this.value="",this.defaultValue="",this.size="medium",this.filled=!1,this.pill=!1,this.label="",this.helpText="",this.clearable=!1,this.disabled=!1,this.placeholder="",this.readonly=!1,this.passwordToggle=!1,this.passwordVisible=!1,this.noSpinButtons=!1,this.required=!1,this.spellcheck=!0}get valueAsDate(){var t,e;return(e=(t=this.input)==null?void 0:t.valueAsDate)!=null?e:null}set valueAsDate(t){const e=document.createElement("input");e.type="date",e.valueAsDate=t,this.value=e.value}get valueAsNumber(){var t,e;return(e=(t=this.input)==null?void 0:t.valueAsNumber)!=null?e:parseFloat(this.value)}set valueAsNumber(t){const e=document.createElement("input");e.type="number",e.valueAsNumber=t,this.value=e.value}firstUpdated(){this.invalid=!this.checkValidity()}handleBlur(){this.hasFocus=!1,this.emit("sl-blur")}handleChange(){this.value=this.input.value,this.emit("sl-change")}handleClearClick(t){this.value="",this.emit("sl-clear"),this.emit("sl-input"),this.emit("sl-change"),this.input.focus(),t.stopPropagation()}handleFocus(){this.hasFocus=!0,this.emit("sl-focus")}handleInput(){this.value=this.input.value,this.invalid=!this.checkValidity(),this.emit("sl-input")}handleInvalid(){this.invalid=!0}handleKeyDown(t){const e=t.metaKey||t.ctrlKey||t.shiftKey||t.altKey;t.key==="Enter"&&!e&&setTimeout(()=>{!t.defaultPrevented&&!t.isComposing&&this.formSubmitController.submit()})}handlePasswordToggle(){this.passwordVisible=!this.passwordVisible}handleDisabledChange(){this.input.disabled=this.disabled,this.invalid=!this.checkValidity()}handleStepChange(){this.input.step=String(this.step),this.invalid=!this.checkValidity()}async handleValueChange(){await this.updateComplete,this.invalid=!this.checkValidity()}focus(t){this.input.focus(t)}blur(){this.input.blur()}select(){this.input.select()}setSelectionRange(t,e,r="none"){this.input.setSelectionRange(t,e,r)}setRangeText(t,e,r,o){this.input.setRangeText(t,e,r,o),this.value!==this.input.value&&(this.value=this.input.value)}showPicker(){"showPicker"in HTMLInputElement.prototype&&this.input.showPicker()}stepUp(){this.input.stepUp(),this.value!==this.input.value&&(this.value=this.input.value)}stepDown(){this.input.stepDown(),this.value!==this.input.value&&(this.value=this.input.value)}checkValidity(){return this.input.checkValidity()}reportValidity(){return this.input.reportValidity()}setCustomValidity(t){this.input.setCustomValidity(t),this.invalid=!this.checkValidity()}render(){const t=this.hasSlotController.test("label"),e=this.hasSlotController.test("help-text"),r=this.label?!0:!!t,o=this.helpText?!0:!!e,i=this.clearable&&!this.disabled&&!this.readonly&&(typeof this.value=="number"||this.value.length>0);return x` -
    - - -
    -
    - - - - ${i?x` - - `:""} - ${this.passwordToggle&&!this.disabled?x` - - `:""} - - -
    -
    - - - ${this.helpText} - -
    - - `}};p.styles=Mr;a([Se(".input__control")],p.prototype,"input",2);a([rt()],p.prototype,"hasFocus",2);a([rt()],p.prototype,"invalid",2);a([h()],p.prototype,"title",2);a([h({reflect:!0})],p.prototype,"type",2);a([h()],p.prototype,"name",2);a([h()],p.prototype,"value",2);a([Dr()],p.prototype,"defaultValue",2);a([h({reflect:!0})],p.prototype,"size",2);a([h({type:Boolean,reflect:!0})],p.prototype,"filled",2);a([h({type:Boolean,reflect:!0})],p.prototype,"pill",2);a([h()],p.prototype,"label",2);a([h({attribute:"help-text"})],p.prototype,"helpText",2);a([h({type:Boolean})],p.prototype,"clearable",2);a([h({type:Boolean,reflect:!0})],p.prototype,"disabled",2);a([h()],p.prototype,"placeholder",2);a([h({type:Boolean,reflect:!0})],p.prototype,"readonly",2);a([h({attribute:"password-toggle",type:Boolean})],p.prototype,"passwordToggle",2);a([h({attribute:"password-visible",type:Boolean})],p.prototype,"passwordVisible",2);a([h({attribute:"no-spin-buttons",type:Boolean})],p.prototype,"noSpinButtons",2);a([h({type:Boolean,reflect:!0})],p.prototype,"required",2);a([h()],p.prototype,"pattern",2);a([h({type:Number})],p.prototype,"minlength",2);a([h({type:Number})],p.prototype,"maxlength",2);a([h({type:Number})],p.prototype,"min",2);a([h({type:Number})],p.prototype,"max",2);a([h()],p.prototype,"step",2);a([h()],p.prototype,"autocapitalize",2);a([h()],p.prototype,"autocorrect",2);a([h()],p.prototype,"autocomplete",2);a([h({type:Boolean})],p.prototype,"autofocus",2);a([h()],p.prototype,"enterkeyhint",2);a([h({type:Boolean,converter:{fromAttribute:t=>!(!t||t==="false"),toAttribute:t=>t?"true":"false"}})],p.prototype,"spellcheck",2);a([h()],p.prototype,"inputmode",2);a([C("disabled",{waitUntilFirstUpdate:!0})],p.prototype,"handleDisabledChange",1);a([C("step",{waitUntilFirstUpdate:!0})],p.prototype,"handleStepChange",1);a([C("value",{waitUntilFirstUpdate:!0})],p.prototype,"handleValueChange",1);p=a([et("sl-input")],p);var jr=T` - ${Q} - - :host { - --border-color: var(--sl-color-neutral-200); - --border-radius: var(--sl-border-radius-medium); - --border-width: 1px; - --padding: var(--sl-spacing-large); - - display: inline-block; - } - - .card { - display: flex; - flex-direction: column; - background-color: var(--sl-panel-background-color); - box-shadow: var(--sl-shadow-x-small); - border: solid var(--border-width) var(--border-color); - border-radius: var(--border-radius); - } - - .card__image { - display: flex; - border-top-left-radius: var(--border-radius); - border-top-right-radius: var(--border-radius); - margin: calc(-1 * var(--border-width)); - overflow: hidden; - } - - .card__image::slotted(img) { - display: block; - width: 100%; - } - - .card:not(.card--has-image) .card__image { - display: none; - } - - .card__header { - display: block; - border-bottom: solid var(--border-width) var(--border-color); - padding: calc(var(--padding) / 2) var(--padding); - } - - .card:not(.card--has-header) .card__header { - display: none; - } - - .card:not(.card--has-image) .card__header { - border-top-left-radius: var(--border-radius); - border-top-right-radius: var(--border-radius); - } - - .card__body { - display: block; - padding: var(--padding); - } - - .card--has-footer .card__footer { - display: block; - border-top: solid var(--border-width) var(--border-color); - padding: var(--padding); - } - - .card:not(.card--has-footer) .card__footer { - display: none; - } -`,jt=class extends P{constructor(){super(...arguments);this.hasSlotController=new Ut(this,"footer","header","image")}render(){return x` -
    - - - - -
    - `}};jt.styles=jr;jt=a([et("sl-card")],jt);/** - * @license - * Copyright 2019 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */const ft=window,qt=ft.ShadowRoot&&(ft.ShadyCSS===void 0||ft.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Pe=Symbol(),Ue=new WeakMap;class qr{constructor(e,r,o){if(this._$cssResult$=!0,o!==Pe)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=r}get styleSheet(){let e=this.o;const r=this.t;if(qt&&e===void 0){const o=r!==void 0&&r.length===1;o&&(e=Ue.get(r)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),o&&Ue.set(r,e))}return e}toString(){return this.cssText}}const Wr=t=>new qr(typeof t=="string"?t:t+"",void 0,Pe),Kr=(t,e)=>{qt?t.adoptedStyleSheets=e.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):e.forEach(r=>{const o=document.createElement("style"),i=ft.litNonce;i!==void 0&&o.setAttribute("nonce",i),o.textContent=r.cssText,t.appendChild(o)})},Ne=qt?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let r="";for(const o of e.cssRules)r+=o.cssText;return Wr(r)})(t):t;/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Wt;const mt=window,Oe=mt.trustedTypes,Zr=Oe?Oe.emptyScript:"",Le=mt.reactiveElementPolyfillSupport,Kt={toAttribute(t,e){switch(e){case Boolean:t=t?Zr:null;break;case Object:case Array:t=t==null?t:JSON.stringify(t)}return t},fromAttribute(t,e){let r=t;switch(e){case Boolean:r=t!==null;break;case Number:r=t===null?null:Number(t);break;case Object:case Array:try{r=JSON.parse(t)}catch(o){r=null}}return r}},Me=(t,e)=>e!==t&&(e==e||t==t),Zt={attribute:!0,type:String,converter:Kt,reflect:!1,hasChanged:Me};class V extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(e){var r;this.finalize(),((r=this.h)!==null&&r!==void 0?r:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach((r,o)=>{const i=this._$Ep(o,r);i!==void 0&&(this._$Ev.set(i,o),e.push(i))}),e}static createProperty(e,r=Zt){if(r.state&&(r.attribute=!1),this.finalize(),this.elementProperties.set(e,r),!r.noAccessor&&!this.prototype.hasOwnProperty(e)){const o=typeof e=="symbol"?Symbol():"__"+e,i=this.getPropertyDescriptor(e,o,r);i!==void 0&&Object.defineProperty(this.prototype,e,i)}}static getPropertyDescriptor(e,r,o){return{get(){return this[r]},set(i){const s=this[e];this[r]=i,this.requestUpdate(e,s,o)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||Zt}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),e.h!==void 0&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const r=this.properties,o=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(const i of o)this.createProperty(i,r[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const r=[];if(Array.isArray(e)){const o=new Set(e.flat(1/0).reverse());for(const i of o)r.unshift(Ne(i))}else e!==void 0&&r.push(Ne(e));return r}static _$Ep(e,r){const o=r.attribute;return o===!1?void 0:typeof o=="string"?o:typeof e=="string"?e.toLowerCase():void 0}u(){var e;this._$E_=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(e=this.constructor.h)===null||e===void 0||e.forEach(r=>r(this))}addController(e){var r,o;((r=this._$ES)!==null&&r!==void 0?r:this._$ES=[]).push(e),this.renderRoot!==void 0&&this.isConnected&&((o=e.hostConnected)===null||o===void 0||o.call(e))}removeController(e){var r;(r=this._$ES)===null||r===void 0||r.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((e,r)=>{this.hasOwnProperty(r)&&(this._$Ei.set(r,this[r]),delete this[r])})}createRenderRoot(){var e;const r=(e=this.shadowRoot)!==null&&e!==void 0?e:this.attachShadow(this.constructor.shadowRootOptions);return Kr(r,this.constructor.elementStyles),r}connectedCallback(){var e;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$ES)===null||e===void 0||e.forEach(r=>{var o;return(o=r.hostConnected)===null||o===void 0?void 0:o.call(r)})}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$ES)===null||e===void 0||e.forEach(r=>{var o;return(o=r.hostDisconnected)===null||o===void 0?void 0:o.call(r)})}attributeChangedCallback(e,r,o){this._$AK(e,o)}_$EO(e,r,o=Zt){var i;const s=this.constructor._$Ep(e,o);if(s!==void 0&&o.reflect===!0){const n=(((i=o.converter)===null||i===void 0?void 0:i.toAttribute)!==void 0?o.converter:Kt).toAttribute(r,o.type);this._$El=e,n==null?this.removeAttribute(s):this.setAttribute(s,n),this._$El=null}}_$AK(e,r){var o;const i=this.constructor,s=i._$Ev.get(e);if(s!==void 0&&this._$El!==s){const n=i.getPropertyOptions(s),d=typeof n.converter=="function"?{fromAttribute:n.converter}:((o=n.converter)===null||o===void 0?void 0:o.fromAttribute)!==void 0?n.converter:Kt;this._$El=s,this[s]=d.fromAttribute(r,n.type),this._$El=null}}requestUpdate(e,r,o){let i=!0;e!==void 0&&(((o=o||this.constructor.getPropertyOptions(e)).hasChanged||Me)(this[e],r)?(this._$AL.has(e)||this._$AL.set(e,r),o.reflect===!0&&this._$El!==e&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(e,o))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(r){Promise.reject(r)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((i,s)=>this[s]=i),this._$Ei=void 0);let r=!1;const o=this._$AL;try{r=this.shouldUpdate(o),r?(this.willUpdate(o),(e=this._$ES)===null||e===void 0||e.forEach(i=>{var s;return(s=i.hostUpdate)===null||s===void 0?void 0:s.call(i)}),this.update(o)):this._$Ek()}catch(i){throw r=!1,this._$Ek(),i}r&&this._$AE(o)}willUpdate(e){}_$AE(e){var r;(r=this._$ES)===null||r===void 0||r.forEach(o=>{var i;return(i=o.hostUpdated)===null||i===void 0?void 0:i.call(o)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){this._$EC!==void 0&&(this._$EC.forEach((r,o)=>this._$EO(o,this[o],r)),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}}V.finalized=!0,V.elementProperties=new Map,V.elementStyles=[],V.shadowRootOptions={mode:"open"},Le==null||Le({ReactiveElement:V}),((Wt=mt.reactiveElementVersions)!==null&&Wt!==void 0?Wt:mt.reactiveElementVersions=[]).push("1.6.1");/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Jt;const gt=window,D=gt.trustedTypes,Be=D?D.createPolicy("lit-html",{createHTML:t=>t}):void 0,k=`lit$${(Math.random()+"").slice(9)}$`,He="?"+k,Jr=`<${He}>`,I=document,ot=(t="")=>I.createComment(t),it=t=>t===null||typeof t!="object"&&typeof t!="function",Re=Array.isArray,Yr=t=>Re(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",st=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ve=/-->/g,De=/>/g,U=RegExp(`>|[ -\f\r](?:([^\\s"'>=/]+)([ -\f\r]*=[ -\f\r]*(?:[^ -\f\r"'\`<>=]|("|')|))|$)`,"g"),Ie=/'/g,Fe=/"/g,je=/^(?:script|style|textarea|title)$/i,Gr=t=>(e,...r)=>({_$litType$:t,strings:e,values:r}),no=Gr(1),F=Symbol.for("lit-noChange"),y=Symbol.for("lit-nothing"),qe=new WeakMap,j=I.createTreeWalker(I,129,null,!1),Xr=(t,e)=>{const r=t.length-1,o=[];let i,s=e===2?"":"",n=st;for(let l=0;l"?(n=i!=null?i:st,v=-1):c[1]===void 0?v=-2:(v=n.lastIndex-c[2].length,b=c[1],n=c[3]===void 0?U:c[3]==='"'?Fe:Ie):n===Fe||n===Ie?n=U:n===Ve||n===De?n=st:(n=U,i=void 0);const $=n===U&&t[l+1].startsWith("/>")?" ":"";s+=n===st?u+Jr:v>=0?(o.push(b),u.slice(0,v)+"$lit$"+u.slice(v)+k+$):u+k+(v===-2?(o.push(void 0),l):$)}const d=s+(t[r]||"")+(e===2?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[Be!==void 0?Be.createHTML(d):d,o]};class nt{constructor({strings:e,_$litType$:r},o){let i;this.parts=[];let s=0,n=0;const d=e.length-1,l=this.parts,[u,b]=Xr(e,r);if(this.el=nt.createElement(u,o),j.currentNode=this.el.content,r===2){const c=this.el.content,v=c.firstChild;v.remove(),c.append(...v.childNodes)}for(;(i=j.nextNode())!==null&&l.length0){i.textContent=D?D.emptyScript:"";for(let _=0;_2||o[0]!==""||o[1]!==""?(this._$AH=Array(o.length-1).fill(new String),this.strings=o):this._$AH=y}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,r=this,o,i){const s=this.strings;let n=!1;if(s===void 0)e=q(this,e,r,0),n=!it(e)||e!==this._$AH&&e!==F,n&&(this._$AH=e);else{const d=e;let l,u;for(e=s[0],l=0;l{var o,i;const s=(o=r==null?void 0:r.renderBefore)!==null&&o!==void 0?o:e;let n=s._$litPart$;if(n===void 0){const d=(i=r==null?void 0:r.renderBefore)!==null&&i!==void 0?i:null;s._$litPart$=n=new lt(e.insertBefore(ot(),d),d,void 0,r!=null?r:{})}return n._$AI(t),n};/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var Yt,Gt;class yt extends V{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,r;const o=super.createRenderRoot();return(e=(r=this.renderOptions).renderBefore)!==null&&e!==void 0||(r.renderBefore=o.firstChild),o}update(e){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=so(r,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),(e=this._$Do)===null||e===void 0||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._$Do)===null||e===void 0||e.setConnected(!1)}render(){return F}}yt.finalized=!0,yt._$litElement$=!0,(Yt=globalThis.litElementHydrateSupport)===null||Yt===void 0||Yt.call(globalThis,{LitElement:yt});const Ke=globalThis.litElementPolyfillSupport;Ke==null||Ke({LitElement:yt});((Gt=globalThis.litElementVersions)!==null&&Gt!==void 0?Gt:globalThis.litElementVersions=[]).push("3.2.2");export{yt as s,no as y}; diff --git a/attic/values/dex/templates/dex/static/logout.html b/attic/values/dex/templates/dex/static/logout.html deleted file mode 100644 index 568d0ab6..00000000 --- a/attic/values/dex/templates/dex/static/logout.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - {{ issuer }} - - - - - - - - - - - -
    -
    - -
    -
    - -
    -

    You have been logged out.

    - Yoy will be redirected in a moment. -
    - - - diff --git a/attic/values/dex/templates/dex/static/main.css b/attic/values/dex/templates/dex/static/main.css deleted file mode 100644 index 2c92859f..00000000 --- a/attic/values/dex/templates/dex/static/main.css +++ /dev/null @@ -1,148 +0,0 @@ -* { - box-sizing: border-box; -} - -body { - margin: 0; -} - -.dex-container { - color: #333; - margin: 45px auto; - max-width: 500px; - min-width: 320px; - /* text-align: center; */ -} - -.dex-btn { - border-radius: 4px; - border: 0; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 1px rgba(0, 0, 0, 0.25); - cursor: pointer; - font-size: 16px; - padding: 0; -} - -.dex-btn:focus { - outline: none; -} - -.dex-btn:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - outline: none; -} - -.dex-btn-icon { - background-position: center; - background-repeat: no-repeat; - background-size: 24px; - border-radius: 4px 0 0 4px; - float: left; - height: 36px; - margin-right: 5px; - width: 36px; -} - -.dex-btn-icon--google { - background-color: #FFFFFF; - background-image: url(../static/img/google-icon.svg);; -} - -.dex-btn-icon--local { - background-color: #84B6EF; - background-image: url(../static/img/email-icon.svg); -} - -.dex-btn-icon--gitea { - background-color: #F5F5F5; - background-image: url(../static/img/gitea-icon.svg); -} - -.dex-btn-icon--github { - background-color: #F5F5F5; - background-image: url(../static/img/github-icon.svg); -} - -.dex-btn-icon--gitlab { - background-color: #F5F5F5; - background-image: url(../static/img/gitlab-icon.svg); - background-size: contain; -} - -.dex-btn-icon--keystone { - background-color: #F5F5F5; - background-image: url(../static/img/keystone-icon.svg); - background-size: contain; -} - -.dex-btn-icon--oidc { - background-color: #EBEBEE; - background-image: url(../static/img/oidc-icon.svg); - background-size: contain; -} - -.dex-btn-icon--bitbucket-cloud { - background-color: #205081; - background-image: url(../static/img/bitbucket-icon.svg); -} - -.dex-btn-icon--atlassian-crowd { - background-color: #CFDCEA; - background-image: url(../static/img/atlassian-crowd-icon.svg); -} - -.dex-btn-icon--ldap { - background-color: #84B6EF; - background-image: url(../static/img/ldap-icon.svg); -} - -.dex-btn-icon--saml { - background-color: #84B6EF; - background-image: url(../static/img/saml-icon.svg); -} - -.dex-btn-icon--linkedin { - background-image: url(../static/img/linkedin-icon.svg); - background-size: contain; -} - -.dex-btn-icon--microsoft { - background-image: url(../static/img/microsoft-icon.svg); -} - -.dex-btn-text { - font-weight: 600; - line-height: 36px; - padding: 6px 12px; - text-align: center; -} - -.dex-subtle-text { - color: #999; - font-size: 12px; -} - -.dex-separator { - color: #999; -} - -.dex-list { - color: #999; - display: inline-block; - font-size: 12px; - list-style: circle; - text-align: left; -} - -.dex-error-box { - background-color: #DD1327; - color: #fff; - font-size: 14px; - font-weight: normal; - max-width: 320px; - padding: 4px 0; -} - -.dex-error-box { - margin: 20px auto; -} diff --git a/attic/values/dex/templates/dex/templates/approval.html b/attic/values/dex/templates/dex/templates/approval.html deleted file mode 100644 index 1c037d2d..00000000 --- a/attic/values/dex/templates/dex/templates/approval.html +++ /dev/null @@ -1,44 +0,0 @@ -{{ template "header.html" . }} - -
    -

    Grant Access

    - -
    -
    - {{ if .Scopes }} -
    {{ .Client }} would like to:
    -
      - {{ range $scope := .Scopes }} -
    • {{ $scope }}
    • - {{ end }} -
    - {{ else }} -
    {{ .Client }} has not requested any personal information
    - {{ end }} -
    -
    - -
    -
    -
    - - - -
    -
    -
    -
    - - - -
    -
    -
    - -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/templates/device.html b/attic/values/dex/templates/dex/templates/device.html deleted file mode 100644 index 674cbdc3..00000000 --- a/attic/values/dex/templates/dex/templates/device.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ template "header.html" . }} - -
    -

    Enter User Code

    -
    -
    - {{ if( .UserCode )}} - - {{ else }} - - {{ end }} -
    - - {{ if .Invalid }} -
    - Invalid or Expired User Code -
    - {{ end }} - -
    -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/templates/device_success.html b/attic/values/dex/templates/dex/templates/device_success.html deleted file mode 100644 index 53b09ce5..00000000 --- a/attic/values/dex/templates/dex/templates/device_success.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ template "header.html" . }} - -
    -

    Login Successful for {{ .ClientName }}

    -

    Return to your device to continue

    -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/templates/error.html b/attic/values/dex/templates/dex/templates/error.html deleted file mode 100644 index 418f76fb..00000000 --- a/attic/values/dex/templates/dex/templates/error.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ template "header.html" . }} - -
    -

    {{ .ErrType }}

    -

    {{ .ErrMsg }}

    -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/templates/footer.html b/attic/values/dex/templates/dex/templates/footer.html deleted file mode 100644 index 5b6e2d65..00000000 --- a/attic/values/dex/templates/dex/templates/footer.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/attic/values/dex/templates/dex/templates/header.html b/attic/values/dex/templates/dex/templates/header.html deleted file mode 100644 index e9ccd123..00000000 --- a/attic/values/dex/templates/dex/templates/header.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - {{ issuer }} - - - - - - - - - - - - -
    -
    - -
    -
    - -
    diff --git a/attic/values/dex/templates/dex/templates/login.html b/attic/values/dex/templates/dex/templates/login.html deleted file mode 100644 index a2200338..00000000 --- a/attic/values/dex/templates/dex/templates/login.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ template "header.html" . }} - -{{ range $c := .Connectors }} - -{{ end }} - - - - - - - -{{ template "footer.html" . }} - - - diff --git a/attic/values/dex/templates/dex/templates/oob.html b/attic/values/dex/templates/dex/templates/oob.html deleted file mode 100644 index ba84d817..00000000 --- a/attic/values/dex/templates/dex/templates/oob.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ template "header.html" . }} - -
    -

    Login Successful

    -

    Please copy this code, switch to your application and paste it there:

    - -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/templates/password.html b/attic/values/dex/templates/dex/templates/password.html deleted file mode 100644 index 8c77b26e..00000000 --- a/attic/values/dex/templates/dex/templates/password.html +++ /dev/null @@ -1,35 +0,0 @@ -{{ template "header.html" . }} - -
    -

    Log in to Your Account

    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - - {{ if .Invalid }} -
    - Invalid {{ .UsernamePrompt }} and password. -
    - {{ end }} - - - -
    - {{ if .BackLink }} - - {{ end }} -
    - -{{ template "footer.html" . }} diff --git a/attic/values/dex/templates/dex/themes/dark/favicon.png b/attic/values/dex/templates/dex/themes/dark/favicon.png deleted file mode 100644 index bcd5f21bfdcd445325d013080c1c5bf339de11ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10415 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 bB!~dCT&iV1Utq6v`$R2uJ+&$oo5=qIA$OJ1 diff --git a/attic/values/dex/templates/dex/themes/light/styles.css b/attic/values/dex/templates/dex/themes/light/styles.css deleted file mode 100644 index 2d920571..00000000 --- a/attic/values/dex/templates/dex/themes/light/styles.css +++ /dev/null @@ -1,113 +0,0 @@ -.theme-body { - background-color: #efefef; - color: #333; - font-family: 'Source Sans Pro', Helvetica, sans-serif; -} - -.theme-navbar { - background-color: #fff; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); - color: #333; - font-size: 13px; - font-weight: 100; - height: 46px; - overflow: hidden; - padding: 0 10px; -} - -.theme-navbar__logo-wrap { - display: inline-block; - height: 100%; - overflow: hidden; - padding: 10px 15px; - width: 300px; -} - -.theme-navbar__logo { - height: 100%; - max-height: 25px; -} - -.theme-heading { - font-size: 20px; - font-weight: 500; - margin-bottom: 10px; - margin-top: 0; -} - -.theme-panel { - background-color: #fff; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - padding: 30px; -} - -.theme-btn-provider { - background-color: #fff; - color: #333; - min-width: 250px; -} - -.theme-btn-provider:hover { - color: #999; -} - -.theme-btn--primary { - background-color: #333; - border: none; - color: #fff; - min-width: 200px; - padding: 6px 12px; -} - -.theme-btn--primary:hover { - background-color: #666; - color: #fff; -} - -.theme-btn--success { - background-color: #2FC98E; - color: #fff; - width: 250px; -} - -.theme-btn--success:hover { - background-color: #49E3A8; -} - -.theme-form-row { - display: block; - margin: 20px auto; -} - -.theme-form-input { - border-radius: 4px; - border: 1px solid #CCC; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - color: #666; - display: block; - font-size: 14px; - height: 36px; - line-height: 1.42857143; - margin: auto; - padding: 6px 12px; - width: 250px; -} - -.theme-form-input:focus, -.theme-form-input:active { - border-color: #66AFE9; - outline: none; -} - -.theme-form-label { - font-size: 13px; - font-weight: 600; - margin: 4px auto; - position: relative; - text-align: left; - width: 250px; -} - -.theme-link-back { - margin-top: 4px; -} diff --git a/attic/values/dex/templates/index.html b/attic/values/dex/templates/index.html deleted file mode 100644 index 3c7132b5..00000000 --- a/attic/values/dex/templates/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Ocanbox IdP - - - - - - - - - - - - - - - - - - diff --git a/attic/values/dex/templates/package-lock.json b/attic/values/dex/templates/package-lock.json deleted file mode 100644 index a0c8b934..00000000 --- a/attic/values/dex/templates/package-lock.json +++ /dev/null @@ -1,6876 +0,0 @@ -{ - "name": "DexTemplates", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "hasInstallScript": true, - "dependencies": { - "@shoelace-style/shoelace": "^2.0.0-beta.88", - "lit": "^2.0.0" - }, - "devDependencies": { - "@web/test-runner": "^0.13.18", - "@web/test-runner-commands": "^0.5.13", - "vite": "^4.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.5.0.tgz", - "integrity": "sha512-tlJpwF40DEQcfR/QF+wNMVyGMaO9FQp6Z1Wahj4Gk3CJQYHwA2xVG7iKDFdW6zuxZY9XWOpGcfNCTsX4McOsOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.1.0.tgz", - "integrity": "sha512-zbsLwtnHo84w1Kc8rScAo5GMk1GdecSlrflIbfnEBJwvTSj1SL6kkOYV+nHraMCPEy+RNZZUaZyL8JosDGCtGQ==" - }, - "node_modules/@floating-ui/dom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.0.tgz", - "integrity": "sha512-TSogMPVxbRe77QCj1dt8NmRiJasPvuc+eT5jnJ6YpLqgOD2zXc5UA3S1qwybN+GVCDNdKfpKy1oj8RpzLJvh6A==", - "dependencies": { - "@floating-ui/core": "^1.0.5" - } - }, - "node_modules/@lit-labs/react": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/react/-/react-1.1.1.tgz", - "integrity": "sha512-9TC+/ZWb6BJlWCyUr14FKFlaGnyKpeEDorufXozQgke/VoVrslUQNaL7nBmrAWdNrmzx5jWgi8lFmWwrxMjnlA==" - }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.0.0.tgz", - "integrity": "sha512-ic93MBXfApIFTrup4a70M/+ddD8xdt2zxxj9sRwHQzhS9ag/syqkD8JPdTXsc1gUy2K8TTirhlCqyTEM/sifNw==" - }, - "node_modules/@lit/reactive-element": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.1.tgz", - "integrity": "sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@shoelace-style/animations": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@shoelace-style/animations/-/animations-1.1.0.tgz", - "integrity": "sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/claviska" - } - }, - "node_modules/@shoelace-style/localize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@shoelace-style/localize/-/localize-3.0.4.tgz", - "integrity": "sha512-HFY90KD+b1Td2otSBryCOpQjBEArIwlV6Tv4J4rC/E/D5wof2eLF6JUVrbiRNn8GRmwATe4YDAEK7NUD08xO1w==" - }, - "node_modules/@shoelace-style/shoelace": { - "version": "2.0.0-beta.88", - "resolved": "https://registry.npmjs.org/@shoelace-style/shoelace/-/shoelace-2.0.0-beta.88.tgz", - "integrity": "sha512-AoT3jtD7Gh5jgEtvbyqgOL+VDmxlcW0UYpKBZ0FzfF7bV38UeZqosnfeXZzQXaP/U/s4BpgkSS0+ZpPuepjDtw==", - "dependencies": { - "@ctrl/tinycolor": "^3.5.0", - "@floating-ui/dom": "^1.0.7", - "@lit-labs/react": "^1.1.0", - "@shoelace-style/animations": "^1.1.0", - "@shoelace-style/localize": "^3.0.4", - "lit": "^2.4.1", - "qr-creator": "^1.0.0" - }, - "engines": { - "node": ">=14.17.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/claviska" - } - }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/babel__code-frame": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz", - "integrity": "sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/co-body": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*" - } - }, - "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", - "dev": true - }, - "node_modules/@types/convert-source-map": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.2.tgz", - "integrity": "sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg==", - "dev": true - }, - "node_modules/@types/cookies": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-epMsEE85fi4lfmJUH/89/iV/LI+F5CvNIvmgs5g5jYFPfhO2S/ae8WSsLOKWdwtoaZw9Q2IhJ4tQ5tFCcS/4HA==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", - "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/http-assert": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", - "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", - "dev": true - }, - "node_modules/@types/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, - "node_modules/@types/koa": { - "version": "2.13.4", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", - "dev": true, - "dependencies": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "node_modules/@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dev": true, - "dependencies": { - "@types/koa": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", - "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==", - "dev": true - }, - "node_modules/@types/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@web/browser-logs": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.5.tgz", - "integrity": "sha512-Qxo1wY/L7yILQqg0jjAaueh+tzdORXnZtxQgWH23SsTCunz9iq9FvsZa8Q5XlpjnZ3vLIsFEuEsCMqFeohJnEg==", - "dev": true, - "dependencies": { - "errorstacks": "^2.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", - "dev": true, - "dependencies": { - "semver": "^7.3.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/dev-server": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.24.tgz", - "integrity": "sha512-2Erea/FywKMH7ANaj8fVqrA6hKXHI0SYWXuf9OvCCSb4t+nwrNlAZGbeL8FXJGgJqD0M6+8g7xAZveeTLYGU9w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.11", - "@rollup/plugin-node-resolve": "^11.0.1", - "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.3.16", - "@web/dev-server-rollup": "^0.3.10", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "ip": "^1.1.5", - "nanocolors": "^0.2.1", - "open": "^8.0.2", - "portfinder": "^1.0.28" - }, - "bin": { - "wds": "dist/bin.js", - "web-dev-server": "dist/bin.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/dev-server-core": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.16.tgz", - "integrity": "sha512-nj6liCErIGtpuZYPf6QaxGQ9nlaHd8Cf/NBcRhogskvjOVFkF3FS9xpjRw3WidkmOQnk+D0ZGCeXjtTibgy5CA==", - "dev": true, - "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", - "@web/parse5-utils": "^1.2.0", - "chokidar": "^3.4.3", - "clone": "^2.1.2", - "es-module-lexer": "^0.9.0", - "get-stream": "^6.0.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^4.0.6", - "koa": "^2.13.0", - "koa-etag": "^4.0.0", - "koa-send": "^5.0.1", - "koa-static": "^5.0.0", - "lru-cache": "^6.0.0", - "mime-types": "^2.1.27", - "parse5": "^6.0.1", - "picomatch": "^2.2.2", - "ws": "^7.4.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/dev-server-rollup": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.10.tgz", - "integrity": "sha512-TWRMP+dIw94+C8ycrqbqBQirR7XNsGsY5O0ZLaS8YQMFs/a7XcGeUq6yq8KARO22gQ9c1Nu9nrRQLp4pVieBQA==", - "dev": true, - "dependencies": { - "@web/dev-server-core": "^0.3.16", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^2.56.2", - "whatwg-url": "^9.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/parse5-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", - "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", - "dev": true, - "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner": { - "version": "0.13.18", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.18.tgz", - "integrity": "sha512-VeKs5RG3PbGc466Ylr0kk1S8vtXQ71Ll7g+t3bkScqlAAUo17qRpetQQjhUWQdU4uAQfteL92GLyfCc06VeYpA==", - "dev": true, - "dependencies": { - "@web/browser-logs": "^0.2.2", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.24", - "@web/test-runner-chrome": "^0.10.3", - "@web/test-runner-commands": "^0.5.10", - "@web/test-runner-core": "^0.10.21", - "@web/test-runner-mocha": "^0.7.4", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "convert-source-map": "^1.7.0", - "diff": "^5.0.0", - "globby": "^11.0.1", - "nanocolors": "^0.2.1", - "portfinder": "^1.0.28", - "source-map": "^0.7.3" - }, - "bin": { - "web-test-runner": "dist/bin.js", - "wtr": "dist/bin.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-chrome": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.3.tgz", - "integrity": "sha512-tE0dH1K2iWJMFsJql1sXntRpNXIEaJVN2VVB/HW6nLMtIoqyI/TQgEPZuDGiW2+UlNrXEI9nuL3fOyxW/lZ38g==", - "dev": true, - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.4.8", - "chrome-launcher": "^0.14.0", - "puppeteer-core": "^10.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-commands": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", - "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", - "dev": true, - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "mkdirp": "^1.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-core": { - "version": "0.10.21", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.21.tgz", - "integrity": "sha512-Dh1TJITyil4w22DXwCmYEyp4BBzRFxRqiUbJ/iPziT1E5heAx/pZPug1oFs83LKUc/crOcDhObz6u4ynGWz9wQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.11", - "@types/babel__code-frame": "^7.0.2", - "@types/co-body": "^6.1.0", - "@types/convert-source-map": "^1.5.1", - "@types/debounce": "^1.2.0", - "@types/istanbul-lib-coverage": "^2.0.3", - "@types/istanbul-reports": "^3.0.0", - "@web/browser-logs": "^0.2.1", - "@web/dev-server-core": "^0.3.16", - "chokidar": "^3.4.3", - "cli-cursor": "^3.1.0", - "co-body": "^6.1.0", - "convert-source-map": "^1.7.0", - "debounce": "^1.2.0", - "dependency-graph": "^0.11.0", - "globby": "^11.0.1", - "ip": "^1.1.5", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "log-update": "^4.0.0", - "nanocolors": "^0.2.1", - "nanoid": "^3.1.25", - "open": "^8.0.2", - "picomatch": "^2.2.2", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-coverage-v8": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", - "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", - "dev": true, - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-mocha": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.4.tgz", - "integrity": "sha512-EvAz6eCyBpVyXUq/bTSYpSwcSd/jH8XY+vAwS/xprWNo2WFY0LW0FcwcuWdq4LckDxTZVXaGb1dj3lDfEsOeVw==", - "dev": true, - "dependencies": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, - "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-launcher": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.0.tgz", - "integrity": "sha512-W//HpflaW6qBGrmuskup7g+XJZN6w03ko9QSIe5CtcTal2u0up5SeReK3Ll1Why4Ey8dPkv8XSodZyHPnGbVHQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chrome-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/co-body": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", - "dev": true, - "dependencies": { - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "dev": true, - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/devtools-protocol": { - "version": "0.0.901419", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", - "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", - "dev": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/errorstacks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.3.2.tgz", - "integrity": "sha512-cJp8qf5t2cXmVZJjZVrcU4ODFJeQOcUyjJEtPFtWO+3N6JPM6vCe4Sfv3cwIs/qS7gnUo/fvKX/mDCVQZq+P7A==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.1.tgz", - "integrity": "sha512-17Ed9misDnpyNBJh63g1OhW3qUFecDgGOivI85JeZY/LGhDum8e+cltukbkSK8pcJnXXEkya56sp4vSS1nzoUw==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dev": true, - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/inflation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.3.tgz", - "integrity": "sha512-XhXIoR+ylAwqG3HhXwnMPQAM/4xfywz52OvxZNmxmTWGGHsvmBv4NSIhURha6yMuvEex1WdtplUTHnxnKpQiGw==", - "dev": true, - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dev": true, - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/koa-etag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", - "dev": true, - "dependencies": { - "etag": "^1.8.1" - } - }, - "node_modules/koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/koa-static/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/lit": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.6.1.tgz", - "integrity": "sha512-DT87LD64f8acR7uVp7kZfhLRrHkfC/N4BVzAtnw9Yg8087mbBJ//qedwdwX0kzDbxgPccWRW6mFwGbRQIxy0pw==", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.2.0", - "lit-html": "^2.6.0" - } - }, - "node_modules/lit-element": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.2.tgz", - "integrity": "sha512-6ZgxBR9KNroqKb6+htkyBwD90XGRiqKDHVrW/Eh0EZ+l+iC+u+v+w3/BA5NGi4nizAVHGYvQBHUDuSmLjPp7NQ==", - "dependencies": { - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.2.0" - } - }, - "node_modules/lit-html": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.6.1.tgz", - "integrity": "sha512-Z3iw+E+3KKFn9t2YKNjsXNEu/LRLI98mtH/C6lnFg7kvaqPIzPn124Yd4eT/43lyqrejpc5Wb6BHq3fdv4S8Rw==", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/marky": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", - "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "dependencies": { - "mime-db": "1.49.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanocolors": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz", - "integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", - "dev": true - }, - "node_modules/open": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", - "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer-core": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz", - "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==", - "dev": true, - "dependencies": { - "debug": "4.3.1", - "devtools-protocol": "0.0.901419", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", - "node-fetch": "2.6.1", - "pkg-dir": "4.2.0", - "progress": "2.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.0.0", - "unbzip2-stream": "1.3.3", - "ws": "7.4.6" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/qr-creator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/qr-creator/-/qr-creator-1.0.0.tgz", - "integrity": "sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==" - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "dev": true, - "dependencies": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/resolve-path/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/resolve-path/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/resolve-path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/resolve-path/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", - "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp": "^0.5.1", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "node_modules/tar-fs/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", - "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", - "dev": true, - "dependencies": { - "esbuild": "^0.16.3", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/rollup": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.1.tgz", - "integrity": "sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-url": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", - "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", - "dev": true, - "dependencies": { - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@ctrl/tinycolor": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.5.0.tgz", - "integrity": "sha512-tlJpwF40DEQcfR/QF+wNMVyGMaO9FQp6Z1Wahj4Gk3CJQYHwA2xVG7iKDFdW6zuxZY9XWOpGcfNCTsX4McOsOg==" - }, - "@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "dev": true, - "optional": true - }, - "@floating-ui/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.1.0.tgz", - "integrity": "sha512-zbsLwtnHo84w1Kc8rScAo5GMk1GdecSlrflIbfnEBJwvTSj1SL6kkOYV+nHraMCPEy+RNZZUaZyL8JosDGCtGQ==" - }, - "@floating-ui/dom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.0.tgz", - "integrity": "sha512-TSogMPVxbRe77QCj1dt8NmRiJasPvuc+eT5jnJ6YpLqgOD2zXc5UA3S1qwybN+GVCDNdKfpKy1oj8RpzLJvh6A==", - "requires": { - "@floating-ui/core": "^1.0.5" - } - }, - "@lit-labs/react": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/react/-/react-1.1.1.tgz", - "integrity": "sha512-9TC+/ZWb6BJlWCyUr14FKFlaGnyKpeEDorufXozQgke/VoVrslUQNaL7nBmrAWdNrmzx5jWgi8lFmWwrxMjnlA==" - }, - "@lit-labs/ssr-dom-shim": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.0.0.tgz", - "integrity": "sha512-ic93MBXfApIFTrup4a70M/+ddD8xdt2zxxj9sRwHQzhS9ag/syqkD8JPdTXsc1gUy2K8TTirhlCqyTEM/sifNw==" - }, - "@lit/reactive-element": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.1.tgz", - "integrity": "sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==", - "requires": { - "@lit-labs/ssr-dom-shim": "^1.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "@shoelace-style/animations": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@shoelace-style/animations/-/animations-1.1.0.tgz", - "integrity": "sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==" - }, - "@shoelace-style/localize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@shoelace-style/localize/-/localize-3.0.4.tgz", - "integrity": "sha512-HFY90KD+b1Td2otSBryCOpQjBEArIwlV6Tv4J4rC/E/D5wof2eLF6JUVrbiRNn8GRmwATe4YDAEK7NUD08xO1w==" - }, - "@shoelace-style/shoelace": { - "version": "2.0.0-beta.88", - "resolved": "https://registry.npmjs.org/@shoelace-style/shoelace/-/shoelace-2.0.0-beta.88.tgz", - "integrity": "sha512-AoT3jtD7Gh5jgEtvbyqgOL+VDmxlcW0UYpKBZ0FzfF7bV38UeZqosnfeXZzQXaP/U/s4BpgkSS0+ZpPuepjDtw==", - "requires": { - "@ctrl/tinycolor": "^3.5.0", - "@floating-ui/dom": "^1.0.7", - "@lit-labs/react": "^1.1.0", - "@shoelace-style/animations": "^1.1.0", - "@shoelace-style/localize": "^3.0.4", - "lit": "^2.4.1", - "qr-creator": "^1.0.0" - } - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/babel__code-frame": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz", - "integrity": "sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==", - "dev": true - }, - "@types/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/co-body": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*" - } - }, - "@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", - "dev": true - }, - "@types/convert-source-map": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.2.tgz", - "integrity": "sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg==", - "dev": true - }, - "@types/cookies": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "@types/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-epMsEE85fi4lfmJUH/89/iV/LI+F5CvNIvmgs5g5jYFPfhO2S/ae8WSsLOKWdwtoaZw9Q2IhJ4tQ5tFCcS/4HA==", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", - "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/http-assert": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", - "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", - "dev": true - }, - "@types/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, - "@types/koa": { - "version": "2.13.4", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", - "dev": true, - "requires": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "@types/node": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", - "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==", - "dev": true - }, - "@types/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@web/browser-logs": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.5.tgz", - "integrity": "sha512-Qxo1wY/L7yILQqg0jjAaueh+tzdORXnZtxQgWH23SsTCunz9iq9FvsZa8Q5XlpjnZ3vLIsFEuEsCMqFeohJnEg==", - "dev": true, - "requires": { - "errorstacks": "^2.2.0" - } - }, - "@web/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@web/dev-server": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.24.tgz", - "integrity": "sha512-2Erea/FywKMH7ANaj8fVqrA6hKXHI0SYWXuf9OvCCSb4t+nwrNlAZGbeL8FXJGgJqD0M6+8g7xAZveeTLYGU9w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@rollup/plugin-node-resolve": "^11.0.1", - "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.3.16", - "@web/dev-server-rollup": "^0.3.10", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "ip": "^1.1.5", - "nanocolors": "^0.2.1", - "open": "^8.0.2", - "portfinder": "^1.0.28" - } - }, - "@web/dev-server-core": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.16.tgz", - "integrity": "sha512-nj6liCErIGtpuZYPf6QaxGQ9nlaHd8Cf/NBcRhogskvjOVFkF3FS9xpjRw3WidkmOQnk+D0ZGCeXjtTibgy5CA==", - "dev": true, - "requires": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", - "@web/parse5-utils": "^1.2.0", - "chokidar": "^3.4.3", - "clone": "^2.1.2", - "es-module-lexer": "^0.9.0", - "get-stream": "^6.0.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^4.0.6", - "koa": "^2.13.0", - "koa-etag": "^4.0.0", - "koa-send": "^5.0.1", - "koa-static": "^5.0.0", - "lru-cache": "^6.0.0", - "mime-types": "^2.1.27", - "parse5": "^6.0.1", - "picomatch": "^2.2.2", - "ws": "^7.4.2" - } - }, - "@web/dev-server-rollup": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.10.tgz", - "integrity": "sha512-TWRMP+dIw94+C8ycrqbqBQirR7XNsGsY5O0ZLaS8YQMFs/a7XcGeUq6yq8KARO22gQ9c1Nu9nrRQLp4pVieBQA==", - "dev": true, - "requires": { - "@web/dev-server-core": "^0.3.16", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^2.56.2", - "whatwg-url": "^9.0.0" - } - }, - "@web/parse5-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", - "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", - "dev": true, - "requires": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - } - }, - "@web/test-runner": { - "version": "0.13.18", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.18.tgz", - "integrity": "sha512-VeKs5RG3PbGc466Ylr0kk1S8vtXQ71Ll7g+t3bkScqlAAUo17qRpetQQjhUWQdU4uAQfteL92GLyfCc06VeYpA==", - "dev": true, - "requires": { - "@web/browser-logs": "^0.2.2", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.24", - "@web/test-runner-chrome": "^0.10.3", - "@web/test-runner-commands": "^0.5.10", - "@web/test-runner-core": "^0.10.21", - "@web/test-runner-mocha": "^0.7.4", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "convert-source-map": "^1.7.0", - "diff": "^5.0.0", - "globby": "^11.0.1", - "nanocolors": "^0.2.1", - "portfinder": "^1.0.28", - "source-map": "^0.7.3" - } - }, - "@web/test-runner-chrome": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.3.tgz", - "integrity": "sha512-tE0dH1K2iWJMFsJql1sXntRpNXIEaJVN2VVB/HW6nLMtIoqyI/TQgEPZuDGiW2+UlNrXEI9nuL3fOyxW/lZ38g==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.4.8", - "chrome-launcher": "^0.14.0", - "puppeteer-core": "^10.2.0" - } - }, - "@web/test-runner-commands": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", - "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "mkdirp": "^1.0.4" - } - }, - "@web/test-runner-core": { - "version": "0.10.21", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.21.tgz", - "integrity": "sha512-Dh1TJITyil4w22DXwCmYEyp4BBzRFxRqiUbJ/iPziT1E5heAx/pZPug1oFs83LKUc/crOcDhObz6u4ynGWz9wQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@types/babel__code-frame": "^7.0.2", - "@types/co-body": "^6.1.0", - "@types/convert-source-map": "^1.5.1", - "@types/debounce": "^1.2.0", - "@types/istanbul-lib-coverage": "^2.0.3", - "@types/istanbul-reports": "^3.0.0", - "@web/browser-logs": "^0.2.1", - "@web/dev-server-core": "^0.3.16", - "chokidar": "^3.4.3", - "cli-cursor": "^3.1.0", - "co-body": "^6.1.0", - "convert-source-map": "^1.7.0", - "debounce": "^1.2.0", - "dependency-graph": "^0.11.0", - "globby": "^11.0.1", - "ip": "^1.1.5", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "log-update": "^4.0.0", - "nanocolors": "^0.2.1", - "nanoid": "^3.1.25", - "open": "^8.0.2", - "picomatch": "^2.2.2", - "source-map": "^0.7.3" - } - }, - "@web/test-runner-coverage-v8": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", - "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^8.0.0" - } - }, - "@web/test-runner-mocha": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.4.tgz", - "integrity": "sha512-EvAz6eCyBpVyXUq/bTSYpSwcSd/jH8XY+vAwS/xprWNo2WFY0LW0FcwcuWdq4LckDxTZVXaGb1dj3lDfEsOeVw==", - "dev": true, - "requires": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-launcher": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.0.tgz", - "integrity": "sha512-W//HpflaW6qBGrmuskup7g+XJZN6w03ko9QSIe5CtcTal2u0up5SeReK3Ll1Why4Ey8dPkv8XSodZyHPnGbVHQ==", - "dev": true, - "requires": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "co-body": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", - "dev": true, - "requires": { - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "dev": true, - "requires": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - } - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "devtools-protocol": { - "version": "0.0.901419", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", - "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "errorstacks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.3.2.tgz", - "integrity": "sha512-cJp8qf5t2cXmVZJjZVrcU4ODFJeQOcUyjJEtPFtWO+3N6JPM6vCe4Sfv3cwIs/qS7gnUo/fvKX/mDCVQZq+P7A==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.1.tgz", - "integrity": "sha512-17Ed9misDnpyNBJh63g1OhW3qUFecDgGOivI85JeZY/LGhDum8e+cltukbkSK8pcJnXXEkya56sp4vSS1nzoUw==", - "dev": true - }, - "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dev": true, - "requires": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - } - }, - "http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "inflation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", - "dev": true - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, - "requires": { - "tsscmp": "1.0.6" - } - }, - "koa": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.3.tgz", - "integrity": "sha512-XhXIoR+ylAwqG3HhXwnMPQAM/4xfywz52OvxZNmxmTWGGHsvmBv4NSIhURha6yMuvEex1WdtplUTHnxnKpQiGw==", - "dev": true, - "requires": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dev": true, - "requires": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - } - }, - "koa-etag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", - "dev": true, - "requires": { - "etag": "^1.8.1" - } - }, - "koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - } - }, - "koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "marky": "^1.2.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "lit": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.6.1.tgz", - "integrity": "sha512-DT87LD64f8acR7uVp7kZfhLRrHkfC/N4BVzAtnw9Yg8087mbBJ//qedwdwX0kzDbxgPccWRW6mFwGbRQIxy0pw==", - "requires": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.2.0", - "lit-html": "^2.6.0" - } - }, - "lit-element": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.2.tgz", - "integrity": "sha512-6ZgxBR9KNroqKb6+htkyBwD90XGRiqKDHVrW/Eh0EZ+l+iC+u+v+w3/BA5NGi4nizAVHGYvQBHUDuSmLjPp7NQ==", - "requires": { - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.2.0" - } - }, - "lit-html": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.6.1.tgz", - "integrity": "sha512-Z3iw+E+3KKFn9t2YKNjsXNEu/LRLI98mtH/C6lnFg7kvaqPIzPn124Yd4eT/43lyqrejpc5Wb6BHq3fdv4S8Rw==", - "requires": { - "@types/trusted-types": "^2.0.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "marky": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", - "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "requires": { - "mime-db": "1.49.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanocolors": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz", - "integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", - "dev": true - }, - "open": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", - "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "puppeteer-core": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz", - "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==", - "dev": true, - "requires": { - "debug": "4.3.1", - "devtools-protocol": "0.0.901419", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", - "node-fetch": "2.6.1", - "pkg-dir": "4.2.0", - "progress": "2.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.0.0", - "unbzip2-stream": "1.3.3", - "ws": "7.4.6" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "requires": {} - } - } - }, - "qr-creator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/qr-creator/-/qr-creator-1.0.0.tgz", - "integrity": "sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==" - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "dev": true, - "requires": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", - "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp": "^0.5.1", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vite": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", - "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", - "dev": true, - "requires": { - "esbuild": "^0.16.3", - "fsevents": "~2.3.2", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" - }, - "dependencies": { - "rollup": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.1.tgz", - "integrity": "sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - } - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", - "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", - "dev": true, - "requires": { - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", - "dev": true - } - } -} diff --git a/attic/values/dex/templates/package.json b/attic/values/dex/templates/package.json deleted file mode 100644 index 17fbb9e4..00000000 --- a/attic/values/dex/templates/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "private": true, - "scripts": { - "install": "dotnet tool restore", - "build": "dotnet fable src -o build/client --run vite build", - "start": "dotnet fable watch src -s -o build/client --run vite" - }, - "dependencies": { - "@shoelace-style/shoelace": "^2.0.0-beta.88", - "lit": "^2.0.0" - }, - "devDependencies": { - "@web/test-runner": "^0.13.18", - "@web/test-runner-commands": "^0.5.13", - "vite": "^4.0.0" - } -} diff --git a/attic/values/dex/templates/src/App.fs b/attic/values/dex/templates/src/App.fs deleted file mode 100644 index 7ead68fb..00000000 --- a/attic/values/dex/templates/src/App.fs +++ /dev/null @@ -1,129 +0,0 @@ -module Lit.TodoMVC.App - -open Browser.WebStorage -open Fable.Core.JsInterop -open Lit - -// importAll "@shoelace-style/shoelace/dist/themes/light.css?inline" -importDefault "@shoelace-style/shoelace/dist/components/button/button.js" -importDefault "@shoelace-style/shoelace/dist/components/icon/icon.js" -importDefault "@shoelace-style/shoelace/dist/components/input/input.js" -importDefault "@shoelace-style/shoelace/dist/components/card/card.js" -importDefault "@shoelace-style/shoelace/dist/components/checkbox/checkbox.js" -import "setBasePath" "@shoelace-style/shoelace/dist/utilities/base-path.js" - -// [] -// let setBasePath (_: string): unit = jsNative -// setBasePath "/dex/static/shoelace/dist" - -[] -let MyApp() = - let _ = LitElement.init(fun cfg -> - cfg.useShadowDom <- true - ) - - let uid, setUid = Hook.useState "" - let amnesia, setAmnesia = Hook.useState false - - let splitUid (x: string) = - let s = x.Split '@' - if s.Length = 1 then - x, "default" - else - x, s[1] - - let getTenanatAnchor tenant = - let e = Browser.Dom.document.getElementById tenant - if isNull e then - Browser.Dom.document.getElementById "default" - else - e - - let gotoIdentityProvider _ = - let uid' = - if uid = "" then - localStorage["user_id"] - else uid - let user, tenant = splitUid uid' - let a = getTenanatAnchor tenant - let href = a.attributes[0] - let hint = - if href.value.Contains "?" then - "&login_hint" - else - "?login_hint" - href.value <- $"{href.value}{hint}={user}" - if not amnesia then - localStorage["user_id"] <- user - a.click() - - let onEnter e = - let key = e?key - if key = "Enter" then - gotoIdentityProvider () - - let defaultUser = - if isNullOrUndefined localStorage["user_id"] then - "" - else - localStorage["user_id"] - // Browser.Dom.document.cookie - // |> fun s -> s.Split ';' - // |> Array.filter (fun s -> s.StartsWith "user_id=") - // |> Array.tryHead - // |> Option.map (fun s -> s.Split '=' |> Array.last) - // |> Option.defaultValue "" - - let toggleAmnesia _ = setAmnesia (not amnesia) - - html $""" -
    -
    - -
    - Oceanbox login -
    - -
    - Remember me -
    -
    - Next -
    -
    -
    -
    - - - """ diff --git a/attic/values/dex/templates/src/DexTemplates.fsproj b/attic/values/dex/templates/src/DexTemplates.fsproj deleted file mode 100644 index 5c9f91af..00000000 --- a/attic/values/dex/templates/src/DexTemplates.fsproj +++ /dev/null @@ -1,12 +0,0 @@ - - - netstandard2.0 - - - - - - - - - diff --git a/attic/values/dex/values-prod.yaml b/attic/values/dex/values-prod.yaml deleted file mode 100644 index 06a6035a..00000000 --- a/attic/values/dex/values-prod.yaml +++ /dev/null @@ -1,26 +0,0 @@ -configSecret: - create: false - name: prod-dex-config - -ingress: - enabled: true - className: nginx - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - nginx.ingress.kubernetes.io/ssl-redirect: "true" - hosts: - - host: idp.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - - host: idp.srv.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - secretName: prod-dex-tls - hosts: - - idp.oceanbox.io - - idp.srv.oceanbox.io - - diff --git a/attic/values/dex/values-staging.yaml b/attic/values/dex/values-staging.yaml deleted file mode 100644 index fd5b8f26..00000000 --- a/attic/values/dex/values-staging.yaml +++ /dev/null @@ -1,21 +0,0 @@ -configSecret: - create: false - name: staging-dex-config - -ingress: - enabled: true - className: nginx - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - nginx.ingress.kubernetes.io/ssl-redirect: "true" - hosts: - - host: idp.beta.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - secretName: staging-dex-tls - hosts: - - idp.beta.oceanbox.io - - diff --git a/attic/values/dex/values.yaml b/attic/values/dex/values.yaml deleted file mode 100644 index 90dd9c69..00000000 --- a/attic/values/dex/values.yaml +++ /dev/null @@ -1,37 +0,0 @@ -replicaCount: 1 -https: - enabled: false -grpc: - enabled: false - -configSecret: - create: false - name: dex-config -config: {} - -volumes: - - name: web - persistentVolumeClaim: - claimName: oceanbox-dex -volumeMounts: - - name: web - mountPath: /srv/dex/web -envVars: [] - -service: - annotations: {} - type: ClusterIP - clusterIP: "" - ports: - http: - port: 5556 - nodePort: - https: - port: 5554 - nodePort: - grpc: - port: 5557 - nodePort: - -serviceMonitor: - enabled: true diff --git a/attic/values/hipster/base/deployment_patch.yaml b/attic/values/hipster/base/deployment_patch.yaml deleted file mode 100644 index c8368399..00000000 --- a/attic/values/hipster/base/deployment_patch.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/livenessProbe/httpGet/path - value: /healthz -- op: replace - path: /spec/template/spec/containers/0/readinessProbe/httpGet/path - value: /healthz -- op: add - path: /spec/template/spec/containers/0/envFrom - value: [] diff --git a/attic/values/hipster/base/kustomization.yaml b/attic/values/hipster/base/kustomization.yaml deleted file mode 100644 index 43173a86..00000000 --- a/attic/values/hipster/base/kustomization.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -patches: - - target: - version: v1 - group: apps - kind: Deployment - path: deployment_patch.yaml - - target: - version: v1 - kind: Service - path: service_patch.yaml -resources: - - _manifest.yaml diff --git a/attic/values/hipster/base/service_patch.yaml b/attic/values/hipster/base/service_patch.yaml deleted file mode 100644 index b0505054..00000000 --- a/attic/values/hipster/base/service_patch.yaml +++ /dev/null @@ -1,7 +0,0 @@ -- op: add - path: /spec/ports/- - value: - name: intra - port: 8000 - protocol: TCP - targetPort: 8000 \ No newline at end of file diff --git a/attic/values/hipster/chart b/attic/values/hipster/chart deleted file mode 100644 index da86631b..00000000 --- a/attic/values/hipster/chart +++ /dev/null @@ -1 +0,0 @@ -oceanbox/hipster diff --git a/attic/values/hipster/prod/appsettings.json b/attic/values/hipster/prod/appsettings.json deleted file mode 100644 index 5e4364a4..00000000 --- a/attic/values/hipster/prod/appsettings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "slurm": { - "baseUrl": "https://hipster-slurmrestd.ekman.oceanbox.io/", - "slurmApi": "slurm/v0.0.38/", - "dbdApi": "slurmdbd/v0.0.38/", - "user": "serf", - "password": "" - }, - "amqp": { - "auth": "", - "host": "10.255.241.201:30673" - }, - "archmeister": "https://archmeister.srv.oceanbox.io", - "pubsubName": "pubsub", - "pubsubTopic": "hipster-atlantis", - "fenceRadius": 1000.0, - "cerbosUrl": "http://prod-cerbos.idp.svc:3593" -} diff --git a/attic/values/hipster/prod/bindings.yaml b/attic/values/hipster/prod/bindings.yaml deleted file mode 100644 index dab40cf8..00000000 --- a/attic/values/hipster/prod/bindings.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# -# Create a queue binding for receiving events from RabbitMQ. -# Used by Hipster to get info about changes in job status from slurm. -# -apiVersion: dapr.io/v1alpha1 -kind: Component -metadata: - name: slurm-events # name of the subscription path in the app! -spec: - type: bindings.rabbitmq - version: v1 - metadata: - - name: host - secretKeyRef: - name: prod-rabbitmq - key: connString - - name: queueName - value: prod-hipster-slurm-job-events - - name: durable - value: true - - name: contentType - value: "application/json" - - name: route - value: /slurm-events -scopes: - - prod-hipster diff --git a/attic/values/hipster/prod/default.env b/attic/values/hipster/prod/default.env deleted file mode 100644 index 44a29c09..00000000 --- a/attic/values/hipster/prod/default.env +++ /dev/null @@ -1,2 +0,0 @@ -SLURM_PASSWORD=wooqueiLee3ao0ha -SEQ_APIKEY=DRRRBGlTvl00icnSGbeT diff --git a/attic/values/hipster/prod/deployment_patch.yaml b/attic/values/hipster/prod/deployment_patch.yaml deleted file mode 100644 index 951f7d23..00000000 --- a/attic/values/hipster/prod/deployment_patch.yaml +++ /dev/null @@ -1,37 +0,0 @@ -- op: add - path: /spec/template/spec/containers/0/env - value: [] -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: LOG_LEVEL - value: "4" -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: CI_ENVIRONMENT - value: "production" -- op: replace - path: /spec/template/spec/containers/0/livenessProbe/httpGet/path - value: /healthz -- op: replace - path: /spec/template/spec/containers/0/readinessProbe/httpGet/path - value: /healthz -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: AMQP_USER - value: user -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: AMQP_PASSWORD - valueFrom: - secretKeyRef: - name: prod-rabbitmq - key: rabbitmq-password -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: prod-hipster-env diff --git a/attic/values/hipster/prod/kustomization.yaml b/attic/values/hipster/prod/kustomization.yaml deleted file mode 100644 index 4cb18bdc..00000000 --- a/attic/values/hipster/prod/kustomization.yaml +++ /dev/null @@ -1,19 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: prod-hipster-appsettings - files: - - appsettings.json -secretGenerator: -- name: prod-hipster-env - envs: - - default.env -patches: - - target: - group: apps - version: v1 - kind: Deployment - path: deployment_patch.yaml -resources: - - bindings.yaml - - ../base diff --git a/attic/values/hipster/staging/appsettings.json b/attic/values/hipster/staging/appsettings.json deleted file mode 100644 index ea4ddf5d..00000000 --- a/attic/values/hipster/staging/appsettings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "slurm": { - "baseUrl": "https://hipster-slurmrestd.ekman.oceanbox.io/", - "slurmApi": "slurm/v0.0.38/", - "dbdApi": "slurmdbd/v0.0.38/", - "user": "serf", - "password": "wooqueiLee3ao0ha" - }, - "amqp": { - "auth": "", - "host": "10.255.241.201:31673" - }, - "archmeister": "https://archmeister.beta.oceanbox.io", - "pubsubName": "pubsub", - "pubsubTopic": "hipster-atlantis", - "fenceRadius": 1000.0, - "cerbosUrl": "http://staging-cerbos.idp.svc:3593" -} diff --git a/attic/values/hipster/staging/bindings.yaml b/attic/values/hipster/staging/bindings.yaml deleted file mode 100644 index 291b3aba..00000000 --- a/attic/values/hipster/staging/bindings.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# -# Create a queue binding for receiving events from RabbitMQ. -# Used by Hipster to get info about changes in job status from slurm. -# -apiVersion: dapr.io/v1alpha1 -kind: Component -metadata: - name: slurm-events # name of the subscription path in the app! -spec: - type: bindings.rabbitmq - version: v1 - metadata: - - name: host - secretKeyRef: - name: staging-rabbitmq - key: connString - - name: queueName - value: staging-hipster-slurm-job-events - - name: durable - value: true - - name: contentType - value: "application/json" - - name: route - value: /slurm-events -scopes: - - staging-hipster diff --git a/attic/values/hipster/staging/default.env b/attic/values/hipster/staging/default.env deleted file mode 100644 index 44a29c09..00000000 --- a/attic/values/hipster/staging/default.env +++ /dev/null @@ -1,2 +0,0 @@ -SLURM_PASSWORD=wooqueiLee3ao0ha -SEQ_APIKEY=DRRRBGlTvl00icnSGbeT diff --git a/attic/values/hipster/staging/deployment_patch.yaml b/attic/values/hipster/staging/deployment_patch.yaml deleted file mode 100644 index d57f4179..00000000 --- a/attic/values/hipster/staging/deployment_patch.yaml +++ /dev/null @@ -1,37 +0,0 @@ -- op: add - path: /spec/template/spec/containers/0/env - value: [] -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: LOG_LEVEL - value: "4" -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: CI_ENVIRONMENT - value: "staging" -- op: replace - path: /spec/template/spec/containers/0/livenessProbe/httpGet/path - value: /healthz -- op: replace - path: /spec/template/spec/containers/0/readinessProbe/httpGet/path - value: /healthz -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: AMQP_USER - value: user -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: AMQP_PASSWORD - valueFrom: - secretKeyRef: - name: staging-rabbitmq - key: rabbitmq-password -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: staging-hipster-env diff --git a/attic/values/hipster/staging/kustomization.yaml b/attic/values/hipster/staging/kustomization.yaml deleted file mode 100644 index e6c6305d..00000000 --- a/attic/values/hipster/staging/kustomization.yaml +++ /dev/null @@ -1,19 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: staging-hipster-appsettings - files: - - appsettings.json -secretGenerator: -- name: staging-hipster-env - envs: - - default.env -patches: - - target: - group: apps - version: v1 - kind: Deployment - path: deployment_patch.yaml -resources: - - bindings.yaml - - ../base diff --git a/attic/values/hipster/values-prod.yaml b/attic/values/hipster/values-prod.yaml deleted file mode 100644 index a656eef8..00000000 --- a/attic/values/hipster/values-prod.yaml +++ /dev/null @@ -1,23 +0,0 @@ -replicaCount: 2 - -podAnnotations: - dapr.io/app-id: "prod-hipster" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" - -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - oceanbox.io/expose: internal diff --git a/attic/values/hipster/values-staging.yaml b/attic/values/hipster/values-staging.yaml deleted file mode 100644 index 35ee5c5a..00000000 --- a/attic/values/hipster/values-staging.yaml +++ /dev/null @@ -1,23 +0,0 @@ -replicaCount: 1 -image: - tag: fddb3a25-debug -podAnnotations: - dapr.io/app-id: "staging-hipster" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-staging - oceanbox.io/expose: internal diff --git a/attic/values/jaeger/values.yaml b/attic/values/jaeger/values.yaml deleted file mode 100644 index 624391de..00000000 --- a/attic/values/jaeger/values.yaml +++ /dev/null @@ -1,3 +0,0 @@ -rbac: - create: true - clusterRole: true diff --git a/attic/values/petimeter/base/deployment_patch.yaml b/attic/values/petimeter/base/deployment_patch.yaml deleted file mode 100644 index c8368399..00000000 --- a/attic/values/petimeter/base/deployment_patch.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/livenessProbe/httpGet/path - value: /healthz -- op: replace - path: /spec/template/spec/containers/0/readinessProbe/httpGet/path - value: /healthz -- op: add - path: /spec/template/spec/containers/0/envFrom - value: [] diff --git a/attic/values/petimeter/base/kustomization.yaml b/attic/values/petimeter/base/kustomization.yaml deleted file mode 100644 index 5c9e9679..00000000 --- a/attic/values/petimeter/base/kustomization.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -patches: - - target: - version: v1 - group: apps - kind: Deployment - path: deployment_patch.yaml -resources: - - _manifest.yaml diff --git a/attic/values/petimeter/chart b/attic/values/petimeter/chart deleted file mode 100644 index 27b1b60c..00000000 --- a/attic/values/petimeter/chart +++ /dev/null @@ -1 +0,0 @@ -oceanbox/petimeter diff --git a/attic/values/petimeter/prod/appsettings.json b/attic/values/petimeter/prod/appsettings.json deleted file mode 100644 index 0a15ad17..00000000 --- a/attic/values/petimeter/prod/appsettings.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "oidc": { - "issuer": "https://idp.oceanbox.io/dex", - "authorization_endpoint": "https://idp.oceanbox.io/dex/auth", - "token_endpoint": "https://idp.oceanbox.io/dex/token", - "jwks_uri": "https://idp.oceanbox.io/dex/keys", - "userinfo_endpoint": "https://idp.oceanbox.io/dex/userinfo", - "device_authorization_endpoint": "https://idp.oceanbox.io/dex/device/code", - "clientId": "petimeter", - "clientSecret": "", - "scopes": [ - "openid", - "email", - "offline_access", - "profile" - ] - }, - "sso": { - "cookieDomain": ".oceanbox.io", - "signedOutRedirectUri": "https://idp.oceanbox.io/dex/static/logout.html", - "redis": "prod-redis-master.redis.svc,user=default,password=secret", - "appDomain": "atlantis", - "dataProtectionKeys": "DataProtection-Keys" - }, - "allowedOrigins": [ - "https://maps.oceanbox.io", - "https://atlantis.srv.oceanbox.io" - ], - "logService" : "https://seq.adm.oceanbox.io", - "logApiKey": "", - "deployEnv": "prod" -} diff --git a/attic/values/petimeter/prod/default.env b/attic/values/petimeter/prod/default.env deleted file mode 100644 index f025760d..00000000 --- a/attic/values/petimeter/prod/default.env +++ /dev/null @@ -1,2 +0,0 @@ -OIDC_CLIENT_SECRET=kkrKo3mmmseMnorf9qw3eklefkoOKFNs -SEQ_APIKEY=jxkOkWGvN2Cro8C7pwm4 diff --git a/attic/values/petimeter/prod/deployment_patch.yaml b/attic/values/petimeter/prod/deployment_patch.yaml deleted file mode 100644 index 77d1f475..00000000 --- a/attic/values/petimeter/prod/deployment_patch.yaml +++ /dev/null @@ -1,23 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/env/0 - value: - name: LOG_LEVEL - value: "4" -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_USER - value: default -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: prod-redis - key: redis-password -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: prod-petimeter-env diff --git a/attic/values/petimeter/prod/kustomization.yaml b/attic/values/petimeter/prod/kustomization.yaml deleted file mode 100644 index 499ca4c7..00000000 --- a/attic/values/petimeter/prod/kustomization.yaml +++ /dev/null @@ -1,18 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: prod-petimeter-appsettings - files: - - appsettings.json -secretGenerator: -- name: prod-petimeter-env - envs: - - default.env -patches: - - target: - group: apps - version: v1 - kind: Deployment - path: deployment_patch.yaml -resources: - - ../base diff --git a/attic/values/petimeter/staging/appsettings.json b/attic/values/petimeter/staging/appsettings.json deleted file mode 100644 index 95d4d460..00000000 --- a/attic/values/petimeter/staging/appsettings.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "oidc": { - "issuer": "https://idp.oceanbox.io/dex", - "authorization_endpoint": "https://idp.oceanbox.io/dex/auth", - "token_endpoint": "https://idp.oceanbox.io/dex/token", - "jwks_uri": "https://idp.oceanbox.io/dex/keys", - "userinfo_endpoint": "https://idp.oceanbox.io/dex/userinfo", - "device_authorization_endpoint": "https://idp.oceanbox.io/dex/device/code", - "clientId": "petimeter_dev", - "clientSecret": "", - "scopes": [ - "openid", - "email", - "offline_access", - "profile" - ] - }, - "sso": { - "cookieDomain": ".oceanbox.io", - "signedOutRedirectUri": "https://idp.oceanbox.io/dex/static/logout.html", - "redis": "staging-redis-master.redis.svc,user=default,password=secret", - "appDomain": "atlantis", - "dataProtectionKeys": "DataProtection-Keys" - }, - "allowedOrigins": [ - "https://atlantis.srv.oceanbox.io", - "https://maps.oceanbox.io", - "https://atlantis.srv.oceanbox.io", - "https://atlantis.local.oceanbox.io:8080" - ], - "logService" : "https://seq.adm.oceanbox.io", - "logApiKey": "", - "deployEnv": "staging" -} diff --git a/attic/values/petimeter/staging/default.env b/attic/values/petimeter/staging/default.env deleted file mode 100644 index 6db814ab..00000000 --- a/attic/values/petimeter/staging/default.env +++ /dev/null @@ -1,2 +0,0 @@ -OIDC_CLIENT_SECRET=kfngKJF9EKVBnnvgkdmPfs0qw3rmjslk -SEQ_APIKEY=jxkOkWGvN2Cro8C7pwm4 diff --git a/attic/values/petimeter/staging/deployment_patch.yaml b/attic/values/petimeter/staging/deployment_patch.yaml deleted file mode 100644 index 192dc380..00000000 --- a/attic/values/petimeter/staging/deployment_patch.yaml +++ /dev/null @@ -1,23 +0,0 @@ -- op: replace - path: /spec/template/spec/containers/0/env/0 - value: - name: LOG_LEVEL - value: "4" -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_USER - value: default -- op: add - path: /spec/template/spec/containers/0/env/- - value: - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: staging-redis - key: redis-password -- op: add - path: /spec/template/spec/containers/0/envFrom/- - value: - secretRef: - name: staging-petimeter-env diff --git a/attic/values/petimeter/staging/kustomization.yaml b/attic/values/petimeter/staging/kustomization.yaml deleted file mode 100644 index e4c181c4..00000000 --- a/attic/values/petimeter/staging/kustomization.yaml +++ /dev/null @@ -1,18 +0,0 @@ -generatorOptions: - disableNameSuffixHash: true -configMapGenerator: -- name: staging-petimeter-appsettings - files: - - appsettings.json -secretGenerator: -- name: staging-petimeter-env - envs: - - default.env -patches: - - target: - group: apps - version: v1 - kind: Deployment - path: deployment_patch.yaml -resources: - - ../base diff --git a/attic/values/petimeter/values-prod.yaml b/attic/values/petimeter/values-prod.yaml deleted file mode 100644 index 2943a48e..00000000 --- a/attic/values/petimeter/values-prod.yaml +++ /dev/null @@ -1,32 +0,0 @@ -replicaCount: 2 - -podAnnotations: - dapr.io/app-id: "prod-petimeter" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" - -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - nginx.ingress.kubernetes.io/proxy-buffer-size: 128k - hosts: - - host: petimeter.srv.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - hosts: - - petimeter.srv.oceanbox.io - secretName: prod-petimeter-tls diff --git a/attic/values/petimeter/values-staging.yaml b/attic/values/petimeter/values-staging.yaml deleted file mode 100644 index 1ad8668d..00000000 --- a/attic/values/petimeter/values-staging.yaml +++ /dev/null @@ -1,33 +0,0 @@ -replicaCount: 1 -podAnnotations: - dapr.io/app-id: "staging-petimeter" - dapr.io/enabled: "true" - dapr.io/app-port: "8000" - dapr.io/config: "tracing" - dapr.io/app-protocol: "http" - dapr.io/enable-app-health-check: "true" - dapr.io/app-health-check-path: "/healthz" - dapr.io/app-health-probe-interval: "3" - dapr.io/app-health-probe-timeout: "200" - dapr.io/app-health-threshold: "2" - dapr.io/sidecar-cpu-request: "100m" - dapr.io/sidecar-memory-request: "250Mi" - dapr.io/sidecar-cpu-limit: "300m" - dapr.io/sidecar-memory-limit: "1000Mi" - dapr.io/log-as-json: "true" -image: - tag: 2da3ce09-debug -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-staging - nginx.ingress.kubernetes.io/proxy-buffer-size: 128k - # oceanbox.io/expose: internal - hosts: - - host: petimeter.beta.oceanbox.io - paths: - - path: / - pathType: ImplementationSpecific - tls: - - hosts: - - petimeter.beta.oceanbox.io - secretName: staging-petimeter-tls diff --git a/attic/values/seq/values.yaml b/attic/values/seq/values.yaml deleted file mode 100644 index e877cad3..00000000 --- a/attic/values/seq/values.yaml +++ /dev/null @@ -1,122 +0,0 @@ -acceptEULA: "Y" - -# Set this URL if you enable ingress and/or AAD authentication. -# Without this URL set to include HTTPS, Seq will try to set a login redirect -# URL with HTTP instead of HTTPS and AAD's registration requires HTTPS. -# The result is that you'll get an error during login: -# AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application -# baseURI: https://my.public.url/ - -# Set this to create an admin user with given password hash at first run. -# See here for docs on how to create the password hash: https://blog.datalust.co/setting-an-initial-password-when-deploying-seq-to-docker/ -# firstRunAdminUsername: "admin" -# firstRunAdminPasswordHash: "" -# firstRunRequireAuthenticationForHttpIngestion: true - -# The complete Seq API and UI. -# This API can accept events and serve API requests. -ui: - service: - port: 80 - ingress: - enabled: true - path: / - hosts: - - seq.adm.oceanbox.io - -# The ingestion-only API. -# This API is a subset of ui that can only ingest events. -ingestion: - service: - port: 5341 - ingress: - enabled: false - path: / - hosts: - - ingestion.seq.adm.oceanbox.io - -# Accept events in the GELF format and forward them to Seq. -gelf: - enabled: false - image: - repository: datalust/seq-input-gelf - pullPolicy: IfNotPresent - service: - port: 12201 - # GELF can be ingested through either TCP or UDP - protocol: TCP - -# Accept events in the Syslog format and forward them to Seq. -syslog: - enabled: false - image: - repository: datalust/seq-input-syslog - pullPolicy: IfNotPresent - service: - port: 514 - # Only UDP is currently supported for ingesting Syslog - protocol: UDP - -service: - type: ClusterIP - -ingress: - annotations: - cert-manager.io/cluster-issuer: letsencrypt-production - kubernetes.io/ingress.class: nginx - oceanbox.io/expose: internal - tls: - - secretName: seq-tls - hosts: - - seq.adm.oceanbox.io - labels: {} - -resources: - limits: - memory: 2Gi - -cache: - # The fraction of RAM that the cache should try fit within. Specifying a larger - # value may allow more events in RAM at the expense of potential instability. - # Setting it to `0` will disable the cache completely. - # 60% (`0.6`) is a good starting point for machines with up to ~8GB of RAM. - targetSize: 0.6 - -persistence: - enabled: true - path: /data - subPath: "" - accessMode: ReadWriteOnce - size: 8Gi - -serviceAccount: - create: false - name: - -## Enable RBAC -rbac: - create: false - rules: [] - -livenessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - -readinessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - -startupProbe: - enabled: true - failureThreshold: 30 - periodSeconds: 10 - -